在构造函数初始值设定项列表中初始化数组成员
C 提供了在构造函数中使用成员初始值设定项列表来初始化类成员的功能。但是,以这种方式初始化数组成员可能会遇到编译错误。
下面的代码片段演示了尝试在构造函数初始值设定项列表中初始化数组成员,但无法编译:
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};
问题与解答:
1 。如何在构造函数初始值设定项列表中初始化数组?
要在构造函数初始值设定项列表中初始化数组,必须使用包含该数组作为成员变量的结构:
struct ArrStruct { int arr[3]; ArrStruct() : arr{1,2,3} { } }; class C { public: C() : arr_struct(ArrStruct()) { } private: ArrStruct arr_struct; };
此方法涉及创建一个单独的结构来保存数组,然后在构造函数中初始化该结构。
2. C 03 标准和数组初始化
C 03 标准没有明确解决构造函数初始值设定项列表中聚合(包括数组)的初始化。原始示例中代码的无效性源于禁止通过初始化列表直接初始化聚合的一般规则。
3. C 11 列表初始化
C 11 列表初始化提供了这个问题的解决方案。但是,原始问题中的语法不正确。正确的语法是:
struct A { int foo[3]; A() : foo{1, 2, 3} { } };
使用大括号直接触发 C 11 的列表初始化功能。
以上是可以在 C 构造函数初始值设定项列表中初始化数组吗?的详细内容。更多信息请关注PHP中文网其他相关文章!