C++98中如何初始化没有默认构造函数的数组类型成员?

问题描述 投票:0回答:1

我想定义一个成员,它是一个类型的数组,不能有默认的构造函数。该数组必须包含实际对象,而不是指针。无法使用动态内存分配(

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} {}
      |            ^
c++ initialization c++98
1个回答
0
投票

有哪些替代方案?

一种替代方法是向类

O
添加静态数据成员,然后使用它来初始化
a
,如下所示:

struct O {
   
    I a[2];  
    
    static I const arrData[2];
    O() : a(arrData){}
} ; 

I const O::arrData[2] = {true, false};
© www.soinside.com 2019 - 2024. All rights reserved.