XcodeでC ++ 11を使用できますか?


86

autoいくつかのクロスプラットフォームプロジェクト(Windows + Mac)でいくつかのC ++ 11機能(たとえば)の使用を検討しています。Windowsでは、VisualStudioはコードベースの一部を単純化できるようになる次のC ++ 11標準の一部をサポートしているので、当然、これらの機能の使用を開始することに興味があります。

しかし、私が知る限り、現在のXCodeバージョン(3.2.4 + GCC 4.2)はC ++ 11機能をまったくサポートしていません。どういうわけかGCCバージョンまたはCLangバージョンをアップグレードできますか?それとも、私はただ舌を噛んで、Appleが将来いつか新しいバージョンをパッケージ化するのを待つべきですか?


答えを見て、ここそこ
f'x 2011年


Clangについて:最近、妥当なC ++ 03サポートを達成したと思いますが、C ++ 0xはまだ遠い目標です。たとえば、可変個引数テンプレートのサポートは進行中であり、移動セマンティクス/右辺値参照はまだ実装されていません。
Matthieu M. 2011

可変個引数テンプレートは、clangで問題なく機能します。
アレクサンドルハメズ2012年

回答:


76

Xcode4.2はついにC ++ 0Xのサポートを追加しました。

  1. プロジェクトビルド設定画面で、「すべて」オプションをオンにします。

  2. 「ビルドオプション」セクションで、コンパイラを「AppleLLVMコンパイラ3.0」に設定します。

  3. 「AppleLLVMコンパイラ3.0-言語」セクションまでスクロールダウンし、「C ++言語ダイアレクト」を「C ++ 0X」に、「C ++標準ライブラリ」を「libc ++」に設定します。

std :: move()、moveコンストラクター、およびR-Value参照は期待どおりに機能することがわかっており、std :: threadとstd :: atomicでテストしています。


2
@ RichardLiu、のGNU++0XオプションC++ Language Dialectとのlibstdc++オプションはC++ Standard Libraryどうですか?それらはいつ使用されますか?

調べてみたところ/Developer/About\ Xcode.pdf、C ++ 11がサポートされているとのことですが、使用する-std=gnu++0xと吐き出されcc1plus: error: unrecognized command line option "-std=0x++"ます。clang++代わりに使用する必要がありますか?
errordeveloper 2012年

@errordeveloper、これまでのところ、XcodeIDE内でC ++ 11を正常にコンパイルしただけでした。コマンドラインまたはメイクファイルでC ++ 11を有効にする方法がわかりません。ごめんなさい。
RichardLiu 2012年

1
@RichardLiu:XCodeは通常clang++、コンパイルg++時に使用g++g++ますが、ではありません。そのため、コマンドラインから使用しようとするとC ++ 11のサポートが失敗します(古いXCodeではサポートされていないため)。参考までに。
Cornstalks 2013年

9

======= 2012年の更新:=======

Clangから始める-多くのC ++ 11機能がClangで利用できるようになりました。Xcodeに含まれています。

======= 2011年1月の元の回答:=======

現時点では、Intelのコンパイラが最もクリーンな方法かもしれません。 http://software.intel.com/en-us/articles/intel-composer-xe/

clangの有望ですが、特に安定していないか、c ++ 0x機能を備えていません。c ++はまだclangにとって非常に新しいものです。

gcc:比較的成熟していますが、xcode用のコンパイラプラグインを作成して維持する必要があります。

カスタムスクリプトを指定することもできますが、それを維持するのは面倒です...すべてを尽くしてアダプタツールを作成しない限り。


1

XcodeはGCCまたはClangC ++コンパイラを使用します。これらのコンパイラでサポートされている機能はすべて公正なゲームです。GCCのC ++互換性ページはここにあり、Clang C ++互換性ページはここにあります


2
本当ですが、GCCのサポートは4.2で停止します。これは、少し長くなり始めています
Mattia 2011年

0

クロスプラットフォームプロジェクト(MacOSX、iOS、gcc / linux、MSVC 10 / windows用のLLVM)で、auto、decltype()、範囲ベースの「for(:)」が機能することを発見しました。

ラムダと可変個引数マクロは、残念ながらLLVMではまだ機能していないようです。


1
MSVC 10および11は、範囲ベースのをサポートしていません。クランは、他の一方で、うまく可変引数テンプレートをサポート。
アレックスB
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.