在 C 0x 中,尝试使用初始值设定项列表初始化成员数组时,可能会遇到错误“赋值中的类型不兼容” .
要解决此问题,请考虑使用可变参数模板构造函数:
struct foo {
int x[2];
template
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
}
如果保留“const”状态不是必需的,您也可以使用函数来加载数组值:
struct foo {
int x[2];
foo(std::initializer_list il) {
std::copy(il.begin(), il.end(), x);
}
};
但是,这种方法放弃了编译时边界检查。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3