C++14结构体继承中无法初始化基类成员?如何解决?
C++14中派生类初始化基类成员的解决方法
在C14标准中,带基类的derived结构体不属于聚合类,因此无法像基类base那样直接用{10}这种统一初始化语法来初始化;而C17放宽了聚合类的定义,允许无用户定义构造函数的派生类被视为聚合类,所以该写法在C++17中合法。
要在C++14中实现从derived初始化base的成员,有以下几种可行方案:
继承基类的构造函数
通过using声明继承基类的构造函数,让派生类复用基类的构造逻辑:struct base { int i; }; struct derived : base { using base::base; // 继承base的构造函数 }; // 此时可以正常初始化 derived d{10};手动定义派生类的构造函数
显式编写派生类的构造函数,在初始化列表中调用基类的初始化逻辑:struct base { int i; }; struct derived : base { derived(int val) : base{val} {} }; derived d{10};用基类对象拷贝初始化派生类
利用派生类的默认拷贝构造函数,用已初始化的基类对象来初始化派生类:derived d = base{10};
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

