当我们从类返回可变对象时,const_cast的未定义行为
Undefined behaviour of const_cast when we return mutable object from class
在这种情况下,我不确定const_cast。我们是否有未定义的行为?
#include <iostream>
#include <vector>
using namespace std;
struct A {
mutable vector<int> a;
A() : a(1,2) {}
const vector<int>& get() const {
return a;
}
};
int main()
{
A a;
vector<int> &b = const_cast<vector<int>&>( a.get() );
b[0] = 3;
cout << a.a[0] << endl;
}
修改非常量变量是很好的定义。 const_cast
的存在正是为了允许使用 const 引用修改非常量对象(尽管名称如此,但对于易失性对象的工作方式类似)。示例代码中没有未定义的行为。
从
对非常量变量的引用中删除 const 是安全的。在这种情况下,a
是非常量,a.a
是非常量,所以const_cast
是完全合法的。
const_cast
也是一个坏主意,因为它可能导致类在背后违反不变性。对向量的修改应通过类的适当公共接口完成。