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编译。
  • 相关阅读:
    Eclipse无法正常启动,弹出对话框内容为 A Java Runtime...
    redis入门常用的命令操作(总结 一)
    初级工程师的面试
    公司金融学理论--MM理论
    以太坊开发环境搭建
    如何以树形结构显示文件目录结构
    Neural Network Basics
    大前端公共知识梳理
    出SS表
    iOS weak关键字
  • 原文地址:https://www.cnblogs.com/aiwz/p/6333119.html
Copyright © 2011-2022 走看看