C では、初期化を使用して std::array を作成する一般的な方法が 2 つあります。 lists:
<code class="cpp">std::array<std::string, 2> strings = { "a", "b" }; std::array<std::string, 2> strings({ "a", "b" });</code>
ただし、GCC 4.6.1 で「',' トークンの前にプライマリ式が必要です」に関するコンパイル エラーが発生した場合、それは std::array のわずかな特殊性が原因です。
初期化子リストを明示的に受け取るコンストラクターを持つ std::vector とは異なり、std::array は struct:
<code class="cpp">template<typename T, int size> struct std::array { T a[size]; };</code>
として定義されるため、初期化子リストを直接受け入れるコンストラクター。代わりに、集約初期化を使用して初期化できます。
std::array 構造体内の配列を正しく集約初期化するには、追加の中括弧のセットが必要です。
<code class="cpp">std::array<std::string, 2> strings = {{ "a", "b" }};</code>
です。 C 標準では、このシナリオでは追加の中括弧はオプションであるべきであると示唆していることに注目してください。したがって、GCC 4.6.1 で発生したコンパイル エラーは、コンパイラのバグである可能性があります。
以上が中括弧で `std::array` を初期化するときに GCC 4.6.1 がエラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。