在 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中文网其他相关文章!