假设我有一个不使用任何C++11的跨平台(Win & Mac)生产代码库。
假设mac上的编译器选项已更改为使用C++11语言方言,但没有C++11标准库。
我试着在谷歌上搜索以了解可能的含意,但现在却是空洞无物。
我的问题是:
发布于 2012-09-11 22:30:44
我不使用XCode,但我设想如果他们为clang提供了一个(可能不完整但正在到达的) C++11模式,那么他们也会发布一个(可能不完整但正在实现) C++11标准库。一起测试。所以你的情况不应该出现,但假设情况是这样的:
std中的新类和函数却不能。除了这种有趣的组合的风险之外,使用C++03代码库并使用任何C++11编译器编译它也有很小的风险。C++03中有一些代码结构,它们编译为C++11,但含义微妙(或完全不同)。
例如,在C++03中编写一个类几乎是可能的,在C++11中使用它时会中断,因为C++11将生成一个没有正确处理的移动构造函数。有时,您必须替换一个编译器生成的复制构造函数,它做不到正确的事情(规则三),虽然C++11确保在那些“正常”情况下移动构造函数被抑制,但也有一些奇怪的边缘情况。不幸的是我现在记不起来了。
C++11标准列出了C++11和C++03之间的一些不兼容性。你希望一切,但你知道是怎么回事。清单载于附录C。首先是:
有效的C++ 2003代码可能无法在本国际标准中编译或产生不同的结果。具体来说,名为
R、u8、u8R、u、uR、U、UR或LR的宏在与字符串文字相邻时不会展开,但将被解释为字符串文本的一部分。
从那里看不出更多引人入胜的信息。但是,它基本上是一个列表,如果它们出现在您的C++03代码库中,则需要进行更改以获得等效的C++11。
发布于 2012-09-12 00:45:23
没有真正的“风险”,但是C++11的很多价值来自于库。
将语言更改为C++11意味着支持C++11语言特性。如果你看一下标准,你会发现它分为语言(第1-16条)和库(第17-30条)两部分。语言功能包括语法、表达式和语句的意义、过载解析等。库功能涵盖标准标头的内容。因此,如果您需要一个特定的头来执行C++11中的某些操作,那么您可能需要一个C++11标准库。
Xcode支持gcc 4.2附带的libstdc++版本,该版本是为C++03构建的。当clang设置为C++11模式时,这很好。它还支持libc++,它旨在提供许多C++11特性,即使使用C++03编译器也是如此。因此,混合和匹配在大多数情况下都应该是很好的。但是,通过使用为彼此设计的语言和库,您将获得更大的价值。
发布于 2012-09-11 22:46:21
不要忘记,许多C++11语言特性都有库特性支持--例如,如果没有std::move和std::forward,就不会有太多的rvalue引用,初始化程序列表也将是垃圾。
https://stackoverflow.com/questions/12378300
复制相似问题