在这种情况下,我不确定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;
}
答案 0 :(得分:3)
很好地定义了修改非const的变量。 const_cast
正好存在,允许使用const引用修改非const对象(尽管名称也适用于volatile)。示例代码中没有未定义的行为。
答案 1 :(得分:1)
从引用中删除const是非常安全的变量是安全的。在这种情况下,a
是非常量的,a.a
是非常量的,因此const_cast
完全合法。
const_cast
也是一个坏主意,因为它可能导致类在其背后违反不变量。对矢量的修改应该通过适当的公共接口来完成。