如何在成员初始化器列表中初始化数组成员
简介
初始化成员初始值设定项列表中的数组成员看起来像是一项简单的任务,但在实践中可能很困难。本文将探讨不同的方法并回答与此主题相关的常见问题。
问题和代码
以下代码片段尝试在构造函数的初始值设定项中初始化数组成员list:
class C { public: C() : arr({1,2,3}) //doesn't compile {} private: int arr[3]; };
但是,代码无法编译。原因是数组只能使用赋值运算符=来初始化,如:
int arr[3] = {1,3,4};
解决方案
一种解决方案是使用结构体来封装数组,允许它在构造函数中初始化。这本质上就是 Boost.Array 库的作用。
C 11 引入了列表初始化,可用于初始化成员初始值设定项列表中的数组。以下代码可以工作:
class C { public: C() : arr{1, 2, 3} { } private: int arr[3]; };
C 03
C 03 标准没有专门解决构造函数初始值设定项中聚合(包括数组)的初始化。原始代码的无效性是直接初始化规则的结果,该规则禁止对数组使用初始化器列表。
C 11
C 11 的列表初始化语法简化了成员初始化列表中数组的初始化。但是,使用正确的语法很重要,如上所示。
以上是如何初始化成员初始化列表中的数组成员?的详细内容。更多信息请关注PHP中文网其他相关文章!