【问题标题】:inheriting constructors doesn't allow array-like initialization继承构造函数不允许类似数组的初始化
【发布时间】:2014-04-05 09:17:30
【问题描述】:

这是一个 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 ‘&lt;brace-enclosed initializer list&gt;’ to ‘inherit’。对我来说它看起来完全正确。

【问题讨论】:

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


【解决方案1】:

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

来自 C++ 标准

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

类继承不是聚合,因为它有一个基类。所以它可能不使用大括号初始化(空的初始化列表除外)。如果你想用一个非空的初始化列表来初始化它,你应该为类继承显式定义构造函数,

【讨论】:

    猜你喜欢
    • 2018-01-30
    • 2014-04-02
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    相关资源
    最近更新 更多