Car*_*arl 1 c++ compiler-construction clang c++11
假设我有一个不使用任何C++ 11的跨平台(Win和Mac)生产代码库.
假设mac上的编译器选项已更改为使用C++ 11语言方言,但没有C++ 11标准库.
我已经尝试用谷歌搜索来了解可能的含义,但我的空洞.
我的问题是:
我不使用XCode,但我想如果他们为clang运送一个(可能是不完整的但到达那里)C++ 11模式,那么他们也发布了一个(可能是不完整的但是到达那里)C++ 11标准图书馆.并一起测试它们.所以你的情况不应该出现,但无论如何都假设:
在形式上它并不意味着什么,因为标准不承认混合和匹配"语言"和"库"的任何方式.这取决于你的编译器它认为它意味着什么.可能意味着新的"语言特征"如rvalue引用,lambdas等变得可用,但命名空间中的新类和函数std却没有.
主要风险可能是您不再按照公认的标准进行编程,而是编程编译器发明的可能未充分记录的事物.如果编译器说在C++ 11模式下它需要一个C++ 11标准库,并且你提供了一个C++ 03标准库,那么你甚至没有责备编译器文档 - 任何可能发生了,你打破了它,你的错.
除了这种有趣组合的风险之外,在使用C++ 03代码库并使用任何 C++ 11编译器编译它时存在小风险.C++ 03中有一些代码构造,它们编译为C++ 11但具有微妙(或严重)不同的含义.
例如,它几乎可以在C++ 03中编写一个在C++ 11中使用时会中断的类,因为C++ 11将生成一个不能正常运行的移动构造函数.有时你必须替换编译器生成的复制构造函数,它不能做正确的事情(Rule of Three),而C++ 11确保在那些"正常"情况下移动构造函数被抑制,有一些奇怪的边缘案例.不幸的是,我现在记不住了.
C++ 11标准列出了C++ 11和C++ 03之间的一些不兼容性.你希望所有人,但你知道它是怎么回事.该清单见附录C.首先是:
有效的C++ 2003代码可能无法编译或在本国际标准中产生不同的结果.具体而言,命名宏
R,u8,u8R,u,uR,U,UR,或LR将不被扩大时邻近于一个字符串但将被解释为字符串文字的一部分.
从那里开始读书并没有那么多.但它基本上是一个列表,如果它们出现在你的C++ 03代码库中,需要改变以获得等效的C++ 11.
| 归档时间: |
|
| 查看次数: |
701 次 |
| 最近记录: |