我正在考虑在一些跨平台项目(Windows+Mac)中使用一些 C++11 的特性,比如 auto
等。在 Windows 上,Visual Studio 支持即将到来的 C++11 标准的部分内容,这可以帮助我简化代码库的某些部分,因此自然而然地,我对开始使用这些功能非常感兴趣。
但据我所知,当前的 XCode 版本(3.2.4 + GCC 4.2)根本不支持任何 C++11 特性。我能否升级 GCC 版本或 Clang 版本?还是说我应该忍耐等待苹果在未来打包一个新版本?
我正在考虑在一些跨平台项目(Windows+Mac)中使用一些 C++11 的特性,比如 auto
等。在 Windows 上,Visual Studio 支持即将到来的 C++11 标准的部分内容,这可以帮助我简化代码库的某些部分,因此自然而然地,我对开始使用这些功能非常感兴趣。
但据我所知,当前的 XCode 版本(3.2.4 + GCC 4.2)根本不支持任何 C++11 特性。我能否升级 GCC 版本或 Clang 版本?还是说我应该忍耐等待苹果在未来打包一个新版本?
Xcode 4.2终于添加了对C++0X的支持:
在项目构建设置屏幕中,打开“全部”选项。
在“构建选项”部分,将编译器设置为“Apple LLVM编译器3.0”。
向下滚动到“Apple LLVM编译器3.0 - 语言”部分,并将“C++语言方言”设置为“C++0X”,将“C++标准库”设置为“libc++”。
std::move()、移动构造函数和R-值引用已被证明可以按预期工作,我正在测试std::thread和std::atomic。
C++иҜӯиЁҖж–№иЁҖ
зҡ„GNU++0X
йҖүйЎ№е’ҢC++ж ҮеҮҶеә“
зҡ„libstdc++
йҖүйЎ№пјҢе®ғ们еә”иҜҘеңЁд»Җд№Ҳжғ…еҶөдёӢдҪҝз”Ёпјҹ - Tin/Developer/About\ Xcode.pdf
,确实它说支持C++11,但是当我使用-std=gnu++0x
时,它却显示了cc1plus: error: unrecognized command line option "-std=0x++"
!那我应该改用clang++
吗? - errordeveloperclang++
,而不是 g++
,这就是为什么当从命令行尝试使用 g++
时 C++11 支持会失败(因为 XCode 提供的古老版本 g++
不支持它)。仅供参考。 - Cornstalks======= 更新 2012: =======
从Clang开始 - 许多C++11特性现在在Clang中可用。它已经包含在Xcode中。
======= 原始答案(Jan 2011): =======
目前来说,英特尔编译器可能是最干净的方法。 http://software.intel.com/en-us/articles/intel-composer-xe/
Clang很有前途,但相对于C++0x特性而言不是特别稳定或功能丰富。对于Clang而言,C++仍然很新。
GCC:相对成熟,但您将不得不为Xcode编写和维护您的编译器插件。
您也可以指定自定义脚本,但这很难维护...除非您全力以赴并创建一个适配器工具。
我已经发现auto、decltype()和基于范围的"for (:)"在跨平台项目中可以使用(LLVM适用于MacOSX、iOS,gcc/linux,MSVC 10/windows)。
很遗憾,在LLVM下似乎还不能使用lambda和可变参数宏。