412

C++ コンパイラを C++11 に更新しようとしています。少し調べたところ、フラグ-std=c++0xまたはフラグを使用する必要があるという結論に達しました-std=gnu++0xが、フラグについて多くのことを知りません。誰でも私を助けることができますか?(Ubuntu 12.04 を使用しています。)

C++11 に含まれているライブラリ (配列) を使用しようとすると、コンパイラから次のエラーが表示されます。

#include <array>
#include <iostream>

int main()
{
    std::array<int, 3> arr = {2, 3, 5};
    ...
}

このファイルには、今後の ISO C++ 標準である C++0x のコンパイラとライブラリのサポートが必要です。このサポートは現在実験段階であり、-std=c++0x または -std=gnu++0x コンパイラ オプションで有効にする必要があります。

4

6 に答える 6

589

フラグ (またはコンパイラ オプション) は、コンパイラの実行可能ファイルに渡される通常のコマンド ライン引数に他なりません。

コマンド ライン (ターミナル) から g++ を呼び出すと仮定します。

$ g++ -std=c++11 your_file.cpp -o your_program

また

$ g++ -std=c++0x your_file.cpp -o your_program

上記が機能しない場合。

于 2012-04-28T13:22:02.023 に答える
16

あなたのUbuntuには、十分に新しいバージョンのg++. 使用するフラグは-std=c++0x.

于 2012-04-28T13:01:19.563 に答える
13

GNU コンパイラの拡張機能を維持したい場合は、-std=c++0x ではなく -std=gnu++0x を使用してください。マニュアルページからの引用は次のとおりです。

コンパイラは、c89 や c++98 などのいくつかの基本標準と、gnu89 や gnu++98 などのこれらの標準の GNU 方言を受け入れることができます。基本標準を指定することにより、コンパイラはその標準に従うすべてのプログラムと、それに矛盾しない GNU 拡張機能を使用するプログラムを受け入れます。たとえば、-std=c89 は、「asm」キーワードや「typeof」キーワードなど、ISO C90 と互換性のない GCC の特定の機能をオフにしますが、省略など、ISO C90 で意味を持たない他の GNU 拡張機能はオフにしません。 「?:」式の中間項。一方、標準の GNU 方言を指定することにより、コンパイラがサポートするすべての機能が有効になります。それらの機能が基本標準の意味を変更し、一部の厳密に準拠したプログラムが拒否される可能性がある場合でも同様です。-pedantic は特定の標準を使用して、そのバージョンの標準でどの機能が GNU 拡張であるかを識別します。たとえば、-std=gnu89 -pedantic は C++ スタイルの // コメントについて警告しますが、-std=gnu99 -pedantic は警告しません。

于 2012-04-28T13:38:55.537 に答える