我在派生类中有一个类内初始化const成员,我想将其传递给基类的构造函数.
例:
class Base{
public:
Base(int a) : i(a){}
private:
int i;
};
class Derived : Base{
public:
Derived() : Base(a){}
private:
const int a = 7;
};
int main(){
Derived d;
}
Run Code Online (Sandbox Code Playgroud)
但是,这会产生一个未初始化的错误:
field 'a' is uninitialized when used here [-Wuninitialized]
Run Code Online (Sandbox Code Playgroud)
我的印象是const初始化它会直接设置值,允许它以这种方式从派生的ctor传递.我做错了什么还是我的印象不对?const in-class初始化成员何时初始化?
在创建对象期间初始化基类和类成员时,初始化顺序为:
所以Base(a)发生之前a = 7发生.
解决这个问题的方法之一是使a是static const或static constexpr.无论如何,这可能是一个好主意,因为非静态const变量使您的类更难以使用.(例如,不会有隐式生成的复制构造函数).