尝试使用初始值设定项列表初始化成员数组时,遇到编译器错误:赋值中的类型不兼容'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中文网其他相关文章!