class C
{
public:
C() : arr({1,2,3}) //doesn't compile
{}
/*
C() : arr{1,2,3} //doesn't compile either
{}
*/
private:
int arr[3];
};
我相信原因是数组只能使用 =
语法进行初始化,即:
int arr[3] = {1,3,4};
问题
- 我该如何做我想做的事情(即在构造函数中 初始化 一个数组(而不是在主体中分配元素))。甚至可能吗?
- C++03 标准对在 ctor 初始化程序中初始化聚合(包括数组)有什么特别的说明吗?或者上述代码的无效是其他一些规则的必然结果?
- C++0x 初始化列表能解决问题吗?
PS 请不要提及向量,boost::arrays,以及它们对数组的优越性,我很清楚。
原文由 Armen Tsirunyan 发布,翻译遵循 CC BY-SA 4.0 许可协议
是的。它使用包含数组的结构。你说你已经知道了,但是我不明白这个问题。这样,您 就 可以在构造函数中初始化一个数组,而无需在主体中进行赋值。这就是
boost::array
所做的。mem-initializer 使用直接初始化。第 8 条的规则禁止这种事情。我不太确定以下情况,但一些编译器确实允许这样做。
有关详细信息,请参阅 此 GCC PR 。
是的,他们有。但是,我认为您的语法无效。您必须直接使用大括号来触发列表初始化