C 0x では、初期化リストを使用してメンバー配列を初期化しようとすると、「割り当てに互換性のない型があります」というエラーが発生する場合があります.
これを解決するには、代わりに可変引数テンプレート コンストラクターを使用することを検討してください。
<code class="cpp">struct foo { int x[2]; template <typename... T> foo(T... ts) : x{ts...} {} }; int main() { // Usage 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 foo f5(3.14); // Error: narrowing conversion not allowed foo f6("foo"); // Error: no conversion from const char* to int }</code>
「const」ステータスを保持することが必須ではない場合は、代わりに関数を使用して配列値をロードすることもできます。 :
<code class="cpp">struct foo { int x[2]; foo(std::initializer_list<int> il) { std::copy(il.begin(), il.end(), x); } };</code>
ただし、このアプローチではコンパイル時の境界チェックが放棄されます。
以上がC 0x の初期化子リストを使用してメンバー配列を初期化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。