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编译。
  • 相关阅读:
    原生js中,call(),apply(),bind()三种方法的区别
    jQuery回溯!!!!!!!
    java中异常类与类别
    Java 多线程(并发)
    Java中反射与常用方法
    漫谈计算机构成
    java语言特性(相比C++)
    初级排序算法学习笔记
    java中参数传递
    关于类的知识
  • 原文地址:https://www.cnblogs.com/aiwz/p/6333119.html
Copyright © 2011-2022 走看看