从子类设置const成员值

Lor*_*one 1 c++ constructor const

码:

struct A{
    const bool const_some_write_once_flag;
    A(): const_some_write_once_flag(false) { }
};
struct B: public A{
    B(): const_some_write_once_flag(true) { }
};
Run Code Online (Sandbox Code Playgroud)

错误是:类'B'没有任何名为'const_some_write_once_flag'的字段.我相信这是因为在构造函数中B,正在创建的对象还不是类型A,因为A尚未初始化"继承切片" .

我已经尝试了几个没有运气的解决方法,我会在这里省略它们.有没有办法实现我想要做的事情?

Jam*_*lis 6

在其初始化列表中,B只能初始化自己的数据成员,直接基类和任何虚拟基类. const_some_write_once_flag不是这些; 它是一个数据成员A.它只能由构造函数初始化A.

struct A{
    const bool const_some_write_once_flag;
    A(): const_some_write_once_flag(false) { }

protected:
    A(bool flag) : const_some_write_once_flag(flag) { }
};
struct B: public A{
    B(): A(true) { }
};
Run Code Online (Sandbox Code Playgroud)

  • 在大多数情况下,我不认为单独的初始化方法是有用的.如果你的类有许多构造函数(或许多需要显式初始化的成员变量),那么应该重新考虑设计. (2认同)