我可以使用C++11和Xcode吗?

86

我正在考虑在一些跨平台项目(Windows+Mac)中使用一些 C++11 的特性,比如 auto 等。在 Windows 上,Visual Studio 支持即将到来的 C++11 标准的部分内容,这可以帮助我简化代码库的某些部分,因此自然而然地,我对开始使用这些功能非常感兴趣。

但据我所知,当前的 XCode 版本(3.2.4 + GCC 4.2)根本不支持任何 C++11 特性。我能否升级 GCC 版本或 Clang 版本?还是说我应该忍耐等待苹果在未来打包一个新版本?


请查看这里和那里的答案:(https://dev59.com/AE7Sa4cB1Zd3GeqP1CQw)和(https://dev59.com/sU7Sa4cB1Zd3GeqP2VDv)。 - F'x
为了获得更积极的结果,请查看:https://dev59.com/xXRA5IYBdhLWcg3wwwzD - David Rodríguez - dribeas
关于Clang:我相信它最近已经实现了合理的C++03支持,但是C++0x仍然是一个遥远的目标。例如,可变参数模板的支持正在进行中,移动语义/右值引用尚未实现。 - Matthieu M.
可变参数模板在clang中对我来说工作得很好。 - Alexandre Hamez
4个回答

76

Xcode 4.2终于添加了对C++0X的支持:

  1. 在项目构建设置屏幕中,打开“全部”选项。

  2. 在“构建选项”部分,将编译器设置为“Apple LLVM编译器3.0”。

  3. 向下滚动到“Apple LLVM编译器3.0 - 语言”部分,并将“C++语言方言”设置为“C++0X”,将“C++标准库”设置为“libc++”。

std::move()、移动构造函数和R-值引用已被证明可以按预期工作,我正在测试std::thread和std::atomic。


2
@RichardLiuпјҢе…ідәҺC++иҜӯиЁҖж–№иЁҖзҡ„GNU++0XйҖүйЎ№е’ҢC++ж ҮеҮҶеә“зҡ„libstdc++йҖүйЎ№пјҢе®ғ们еә”иҜҘеңЁд»Җд№Ҳжғ…еҶөдёӢдҪҝз”Ёпјҹ - Tin
我查看了/Developer/About\ Xcode.pdf,确实它说支持C++11,但是当我使用-std=gnu++0x时,它却显示了cc1plus: error: unrecognized command line option "-std=0x++"!那我应该改用clang++吗? - errordeveloper
@errordeveloper,到目前为止,我只在Xcode IDE中成功编译了C++11。我不知道如何在命令行或makefile中启用C++11。抱歉。 - RichardLiu
1
@RichardLiu:XCode 编译时通常使用 clang++,而不是 g++,这就是为什么当从命令行尝试使用 g++ 时 C++11 支持会失败(因为 XCode 提供的古老版本 g++ 不支持它)。仅供参考。 - Cornstalks

9

======= 更新 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编写和维护您的编译器插件。

您也可以指定自定义脚本,但这很难维护...除非您全力以赴并创建一个适配器工具。


1

Xcode使用GCC或Clang C++编译器。这些编译器支持的任何特性都可以使用。GCC的C++兼容性页面在此处,而Clang C++兼容性页面在此处


2
真实的情况是GCC只支持到4.2版本,而这个版本已经开始有点老了。 - Mattia

0

我已经发现auto、decltype()和基于范围的"for (:)"在跨平台项目中可以使用(LLVM适用于MacOSX、iOS,gcc/linux,MSVC 10/windows)。

很遗憾,在LLVM下似乎还不能使用lambda和可变参数宏。


1
MSVC 10和11不支持基于范围的for循环。另一方面,Clang非常好地支持可变参数模板。 - Alex B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接