继承构造函数不允许类似数组的初始化

时间:2014-03-04 02:38:19

标签: c++ inheritance c++11 constructor

这是一个g ++错误吗?

#include <array>

struct inherit : std::array<int , 3>{
    using std::array<int , 3>::array;
};

std::array<int, 3> ok1 = {1,2,3};
inherit ok2;
inherit bad = {1,2,3};

实例化bad,我得到error: could not convert ‘{1, 2, 3}’ from ‘<brace-enclosed initializer list>’ to ‘inherit’。看起来对我来说绝对正确。

1 个答案:

答案 0 :(得分:3)

std::array是一个聚合。它没有用户定义的构造函数。

来自C ++标准

  

1聚合是一个没有用户提供的数组或类(第9节)   构造函数(12.1),没有私有或受保护的非静态数据成员   (第11条),没有基类(第10条),没有虚函数   (10.3)。

class inherit不是聚合,因为它有一个基类。因此它可能不使用大括号初始化(除了空的初始化列表)。如果要使用非空初始化列表

初始化类继承,则应显式定义类继承的构造函数