我想定义一个成员,它是一个类型的数组,不能有默认的构造函数。该数组必须包含实际对象,而不是指针。无法使用动态内存分配(
new
/delete
)。
显然这在 C++98 中不太可能,因为初始值设定项列表尚不可用?有哪些替代方案?
这里MVP:
struct I {
const bool b;
};
struct O {
I a[2];
O() : a{true, false} {}
} o;
GCC 错误消息:
<source>: In constructor 'O::O()':
<source>:8:12: error: extended initializer lists only available with '-std=c++11' or '-std=gnu++11' [-Werror=c++11-extensions]
8 | O() : a{true, false} {}
| ^
有哪些替代方案?
一种替代方法是向类
O
添加静态数据成员,然后使用它来初始化 a
,如下所示:
struct O {
I a[2];
static I const arrData[2];
O() : a(arrData){}
} ;
I const O::arrData[2] = {true, false};