zoukankan      html  css  js  c++  java
  • 印象Clang

    最近打算把项目做成跨平台的,使之能够在Mac上运行。做为XCode的默认编译器,据说Clang的编译速度很快,所以决定第一步就需要玩起Clang来。
    在编译的过程中遇到不少问题,整理了如下几点:

    编译速度
    跟传说中的一样,确实很快。

    错误提示
    Clang的提示比cl精准一些,尤其是模版方面,不会有一堆错误信息。

    模版支持
    想比cl,Clang对标准的执行更严格些,或者说更死板些。
    比如:
     1 template<class X>
     2 void doSomething(const X& x)
     3 {
     4  doOthering(x);
     5 }
     6 template<class Y>
     7 void doOtherthing(const Y& y)
     8 {
     9 .
    10 }

             

    doOtherthing声明在doSomething之后,但却在doSomething中使用。在这种情况下,cl编译是没有问题。在模版中,Clang也需要前置声明doOtherthing。

    另外对typename的处理跟cl也有出入。幸好支持the new auto,所以能用auto的地方就大胆的用auto吧。

    标准支持C++11
    Clang3.0对C++11的支持太弱。std::shared_ptr, lambda, the new for统统不支持。Clang3.1加入了lambda支持。
    cl2010也不支持the new for,但提供了个for each。for each用起来很爽,但要跨平台就得改啦!

    其他
    Clang要求构造函数初始化列表里面成员变量的初始化顺序要符合声明的顺序,这样可以消除潜在的bug。

    结论
    相比cl,Clang更严格执行C++标准。期待Clang尽快更新,对C++11做的更好。目前,项目的代码没办法顺利迁移用Clang编译。
  • 相关阅读:
    Autocomplete 使用——尽信书则不如无书!
    SQL累加注意点
    自己写的一个可行且简单的FTP操作类
    分割表值函数
    转载SQL游标
    一个存储过程包含了很多很多
    转载预防SQL注入攻击之我见
    Jquery温习1
    WMI远程启动软件(某个应用程序)
    struts如何实现国际化(转)
  • 原文地址:https://www.cnblogs.com/aiwz/p/6333119.html
Copyright © 2011-2022 走看看