我可以在Xcode中使用C ++ 11吗?


86

我正在考虑auto在某些跨平台项目(Windows + Mac)中使用某些C ++ 11功能(例如)。在Windows上,Visual Studio支持即将到来的C ++ 11标准的某些部分,这将使我能够简化部分代码库,因此自然而然地,我将有兴趣开始使用这些功能。

但是据我所知,当前的XCode版本(3.2.4 + GCC 4.2)根本不支持任何C ++ 11功能。我可以以某种方式升级GCC版本或CLang版本吗?还是我应该只咬一口舌头,等待苹果在将来的某个时候打包新版本?


看看这里那里的答案。
F'x 2011年


关于Clang:我相信它最近已经获得了合理的C ++ 03支持,但是C ++ 0x仍然是遥远的目标。例如,可变参数模板的支持正在进行中,并且尚未实现移动语义/右值引用。
Matthieu M.

可变参数模板对clang来说对我来说很好用。
亚历山大·哈梅兹

Answers:


76

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

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

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

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

已知std :: move(),move构造函数和R值引用可以按预期工作,并且我正在对std :: thread和std :: atomic进行测试。


2
@ RichardLiu,怎么样GNU++0X的选择C++ Language Dialectlibstdc++供选择C++ Standard Library?什么时候使用它们?
2012年

我看过了/Developer/About\ Xcode.pdf,是的,它说支持C ++ 11,但是当我使用-std=gnu++0x它时,它会吐出来cc1plus: error: unrecognized command line option "-std=0x++"!我应该clang++改用吗?
errordeveloper 2012年

@errordeveloper,到目前为止,我只在Xcode IDE中成功编译了C ++ 11。我不知道如何在命令行或makefile中启用C ++ 11。抱歉。
理查德·刘

1
@RichardLiu:XCode通常clang++在编译时使用,而不是g++,这就是为什么g++在命令行中尝试使用C ++ 11时会失败的原因(因为古老的g++XCode不支持它)。仅供参考。
2013年

9

=======更新2012:=======

从Clang开始-Clang现在提供了许多C ++ 11功能。它包含在Xcode中。

======= 2011年1月的原始答案:=======

Intel的编译器可能是目前最干净的方法。 http://software.intel.com/zh-CN/articles/intel-composer-xe/

clang很有前途,但不是特别稳定或具有wrt c ++ 0x功能。对于clang来说,c ++还是很新的。

gcc:相对成熟,但是您必须编写和维护xcode的编译器插件。

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


1

Xcode使用GCC或Clang C ++编译器。这些编译器支持的任何功能都是公平的游戏。GCC的C ++兼容性页面在这里和锵C ++兼容性页面在这里


2
确实如此,但GCC的支持在4.2处停止,这开始变得有些长
Mattia

0

我发现跨平台项目(适用于MacOSX,iOS,gcc / linux,MSVC 10 / windows的LLVM)的自动,decltype(),基于范围的“ for(:)”工作。

可悲的是,lambdas和可变参数宏在LLVM下似乎不起作用。


1
MSVC 10和11不支持基于范围的。另一方面,Clang确实支持可变参数模板。
Alex B
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.