ホームページ >バックエンド開発 >C++ >中括弧で `std::array` を初期化するときに GCC 4.6.1 がエラーをスローするのはなぜですか?

中括弧で `std::array` を初期化するときに GCC 4.6.1 がエラーをスローするのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-29 06:42:31563ブラウズ

Why does GCC 4.6.1 throw an error when initializing a `std::array` with braces?

中かっこを使用した std::array の初期化

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。