当我们从类返回可变对象时,const_cast的未定义行为

Undefined behaviour of const_cast when we return mutable object from class

本文关键字:cast const 未定义 我们 返回 对象      更新时间:2023-10-16

在这种情况下,我不确定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也是一个坏主意,因为它可能导致类在背后违反不变性。对向量的修改应通过类的适当公共接口完成。