当我希望类的成员变量在类的生命周期内保持不变时,我有时会使用 const_cast,但它需要在构造函数期间是可变的。例子:
struct qqq {
const vector<foo> my_foo;
qqq(vector<foo>* other) {
vector<foo>& mutable_foo = const_cast<vector<foo>&>(my_foo)
other->swap(mutable_foo);
}
};
我曾假设在构造函数中执行此操作基本上没问题,因为此时没有其他人依赖它,因此它不会与优化等交互不良。
但是最近有人告诉我这是“未定义的行为”,并且在任何情况下构造 const 对象后对其进行变异基本上是非法的。
有人可以澄清吗?这是一个不好的/未定义的行为/要做的事情吗?