C++ 从类返回可变对象时const_cast的未定义行为
我不确定在这种情况下const_cast的情况。我们是否有未定义的行为C++ 从类返回可变对象时const_cast的未定义行为,c++,C++,我不确定在这种情况下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; } }; in
#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;
}
#包括
#包括
使用名称空间std;
结构A{
可变向量a;
A():A(1,2){}
常量向量&get()常量{
返回a;
}
};
int main()
{
A A;
向量&b=const_cast(a.get());
b[0]=3;
cout修改一个非常量变量定义良好。const\u cast
的存在正好允许使用常量引用修改非常量对象(尽管名称不同,对volatile也适用)。示例代码中没有未定义的行为。从对非常量变量的引用中删除常量是安全的。在这种情况下,a
是非常量,a.a
是非常量,因此常量转换
是完全合法的
const_cast
也是一个坏主意,因为它可能会导致在背后违反类的不变量。对向量的修改应该通过类的适当公共接口来完成。dupe/related:的最后一部分有助于理解const casting以及您可以和不能做什么。