在对象构造后初始化 const 成员变量
Initializing a const member variable after object construction
我经常发现自己希望我可以让一个对象的成员变量是const,但是系统允许在构造后初始化该const变量。有没有一种机制可以让我这样做?
为了澄清,这里有一个例子:
class A
{
public:
A(){}
initialize(int x) { c = x; }
private:
const int c;
}
我希望能够做这样的事情。我在构造时没有这些信息,所以我不能简单地将初始化移动到构造函数的初始化列表中。
不可以,您无法在构造后初始化 const 成员。
但是,不要忘记,您可以在初始值设定项列表中调用静态函数,因此在大多数情况下,您可以从初始值设定项列表中初始化memeber。
class A
{
public:
A(){}
initialize(int x):c(computeC(x)) {}
private:
const int c;
static int computeC(int){/*...*/}
};
您还可以为该成员定义特殊的 getter 并使用它来访问成员。
class A
{
public:
A(){}
initialize(int x) { c_internal = x; }
private:
const int& c() const { return c_internal; }
int c_internal;
}
相关文章:
- 不允许运算符 const 参数调用 const 成员函数
- c++ 是否保证标头初始化的静态 const 成员跨编译单元和库共享单个实例?
- 在类声明中初始化 const 成员变量时在调试模式下出现异常
- 如何避免将 const 和非 const 成员函数输入到模板中的代码重复
- 初始化 const 成员的正确方法
- 使用 Boost 对具有 const 成员的类进行序列化
- 非常量调用 const 成员函数失败,只读位置C++
- PIMPL类的设置应该是const成员函数
- 与其他静态const成员初始化静态常量成员
- decltype 不会推断 const 对象的 const 成员
- 如何初始化不是静态的const成员
- 如何使用常量变量初始化类的 const 成员变量
- 使用模板参数初始化静态 const 成员
- 与const成员配对的向量
- 通过参考const成员通过参考时,尝试引用已删除的函数
- const成员初始化之前的用法是GCC和Clang的这种预期行为
- 通过const成员变量访问内联函数
- 与const成员一起安排新的和班级的分配
- 在const函数中调用非CONST成员的非const函数
- 为什么即使对于 "copy on write" 的 const 成员函数也返回一个代理类?