g++ 4.7 支持数组成员初始化,我开始使用它。
下面的代码无法编译。
struct A
{
A(int){};
A(const A&) = delete;
A& operator=(const A&) = delete;
~A(){};
};
struct B
{
B():
a{{0},{1}}
{};
A a[2];
};
B b;
gcc 4.8(预发行版)的错误消息是:
n.cc: In constructor ‘B::B()’:
n.cc:12:20: error: use of deleted function ‘A::A(const A&)’
a{{0},{1}}
^
n.cc:4:8: error: declared here
A(const A&) = delete;
^
有没有办法让这段代码工作?我不能轻易更改 A 的构造函数和析构函数。我似乎需要一个移动构造函数或复制构造函数来初始化数组,但这似乎违反直觉,因为我真正想要的只是就地构造。
如果我将 a[2] 拆分为 2 个成员 a0 和 a1,并分别构造它们,它会起作用。然而,这看起来很可疑。