初期化子リストを使用してメンバー配列を初期化しようとしているときに、コンパイラ エラーが発生しました: 代入に互換性のない型があります'std::initializer_list
初期化子リスト コンストラクターではなく、Variadic を選択できますテンプレート コンストラクター:
<code class="cpp">struct Foo { int x[2]; template <typename... Ts> Foo(Ts... ts) : x{ts...} {} };</code>
このアプローチを使用すると、次のように Foo オブジェクトを初期化できます:
<code class="cpp">Foo f1(1, 2); // OK Foo f2{1, 2}; // Also OK Foo f3(42); // OK; x[1] zero-initialized Foo f4(1, 2, 3); // Error: too many initializers</code>
定数性が必須ではない場合は、コンストラクターでの初期化をスキップした後、関数本体内で配列を初期化できます:
<code class="cpp">struct Foo { int x[2]; // or std::array<int, 2> x; Foo(std::initializer_list<int> il) { std::copy(il.begin(), il.end(), x); // or std::copy(il.begin(), il.end(), x.begin()); // or x.fill(il.begin()); } }</code>
ただし、このメソッドには、可変長引数テンプレートが提供するコンパイル時の境界チェックがありません。コンストラクター。
以上が初期化子リストを使用して C メンバー配列を初期化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。