Joh*_*ren 12 c++ arrays gcc clang c++11
关于为什么我不能初始化对象数组(如果它们有私有拷贝构造函数)的现有问题?特指C++ 03.我从那个问题中知道我在C++ 03中不允许做什么,但我认为它应该可以在C++ 11中实现
我有一个不可移动的类(称之为Child),我需要在另一个类的构造函数中初始化一个Child数组(称之为Parent)."不可移动"是指在该对象的生命周期内,Child对象的地址必须保持不变.这样做的正确方法是什么?
使用C++ 11,我尝试了以下内容:
class Child
{
public:
Child (int x) {}
~Child () {}
Child (const Child &) = delete;
};
class Parent
{
public:
Parent () : children {{5}, {7}} {}
private:
Child children[2];
};
Run Code Online (Sandbox Code Playgroud)
此代码与Clang 3.5.0编译良好,但GCC 4.9.1抱怨我正在尝试使用已删除的复制构造函数:
test.cc: In constructor ‘Parent::Parent()’:
test.cc:13:35: error: use of deleted function ‘Child::Child(const Child&)’
Parent () : children {{5}, {7}} {}
^
test.cc:7:5: note: declared here
Child (const Child &) = delete;
^
Run Code Online (Sandbox Code Playgroud)
我已经读过复制初始化和直接初始化之间的区别(例如这里和这里),我想避免使用直接初始化来调用复制构造函数.我的语法错了吗?这是GCC中的错误吗?或者我正在尝试做什么是不可能的?