嘗試使用初始值設定項列表初始化成員數組時,遇到編譯器錯誤:賦值中的型別不相容'std::initializer_list
您可以選擇可變參數,而不是初始化列表構造函數模板構造函數:
<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中文網其他相關文章!