web-dev-qa-db-ja.com

私が現在使用しているc ++ normeは何ですか?

最近、私が書いたc ++コードのコンパイルエラーに直面したため、C++ 11コンパイラを使用しているかどうか尋ねられましたが、正直に言って、コンパイラのバージョンを確認する方法がわかりません!これを理解する方法はありますか?

ところで、コードブロックをIDEとして使用しています。これには、MinGWのGCCコンパイラとGDBデバッガが含まれています。また、Linuxでc ++コードをコンパイルしている場合、コンパイラのバージョンを知るためにどのコマンドを実行すればよいですか。 ?

18
Joy

それは難しい問題です。 C++ 11は、コンパイラのバージョンではなく、標準のバージョンを指します。異なるコンパイラ、および特定のコンパイラの異なるバージョンは、少なくとも最近のバージョンでは、通常、標準のバージョンの混合を実装します。多かれ少なかれ、C++ 11の実装はかなり新しくなり、おそらくかなりバグが多いからです。

ほとんどのコンパイラには、バージョンを出力するオプションがあります。多くは、詳細モードで体系的に出力します。 g ++の場合は、g++ --versionを試してください。最近のバージョンのg ++​​はC++ 11をいくらかサポートしていますが、-std=c++0x(通常の-std=c++03または-std=c++98ではなく)でアクティブ化する必要があります。名前(c++0xではなくc++11)が示すように、これはnotは本当にC++ 11です。これは、主要な新機能のいくつか(ほとんど?)の実装であり、さまざまなワーキングペーパーに基づく予備バージョンであり、最終的な標準ではありません。

(FWIW:コンパイラがC++ 11のすべてを完全に実装しているとは思いませんが、私は間違っていることが証明されたいです。)

18
James Kanze

次のようにコンパイラーのバージョンを確認できます。

g++ --version

C++ 11を使用しているかどうかはわかりません。 c ++ 11機能を使用するには、thr -std=c++0xフラグを指定してコンパイラーを呼び出す必要があります。

g++ -std=c++0x ....

Gccはまだc ++ 11の100%を実装していないこと、およびgccが実装する量はバージョンによって異なることに注意してください。サポートされている機能の表については こちら を参照してください。

[〜#〜] edit [〜#〜]:厳密に言えば、GCCを使用している場合、完全に準拠したc ++ 11コンパイラを使用することはできません不足している機能のため。しかし、バージョン4.6.1以降は、標準の多くをカバーしています。

13
juanchopanza

Linuxを使用している場合、バージョンの確認は簡単です。

> gcc --version

あなたが持っているバージョンを教えてくれます。 GCC C++ 11のサポートはまだ不完全であることに注意してください。詳細はここにあります http://gcc.gnu.org/projects/cxx0x.html

私はいくつかのC++ 11機能、つまり初期化子リストとnullptr定数を自分で使用しました。 GCC 4.6を使用していますが、問題なく動作しています。

編集:はい、@ jaunchopanzaが言ったように、-std=c++0x動作させるためのコンパイラフラグ。 Code :: Blocksを使用している場合は、プロジェクトを右クリックしてBuild options ...を選択し、g ++が次期C++ 0x ISO C++言語標準[-std = c ++ 0x]に従うようにします

5
Nathan S.