c++ - 当我们从类中返回可变对象时 const_cast 的未定义行为

标签 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;
    }
};

int main()
{
    A a;
    vector<int> &b = const_cast<vector<int>&>( a.get() );
    b[0] = 3;
    cout << a.a[0] << endl;
}

最佳答案

修改非常量的变量是明确定义的。 const_cast 的存在正是为了允许使用 const 引用修改非常量对象(尽管名称不同,但对 volatile 的作用类似)。示例代码中没有未定义的行为。

关于c++ - 当我们从类中返回可变对象时 const_cast 的未定义行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36042674/

相关文章:

c++ - 如何让内部模板类成为外部模板类的类型?

c++ - 如何 Hook 新创建的注册表

c++ - std::map 和 -fno-implicit-templates

c++ - 检查数组的索引是否为空

c++ - 如何正确释放placement new分配的内存?

c++ - 对 C++ 中类声明和实现的位置感到困惑

c++ - 不能在带有 try/catch 的构造函数初始化列表中使用统一初始化

C++ 打破循环包含

c++ - 如何突破 120 字节的限制?

c++ - 如果我链接到 libmysqld,我需要调用 mysql_thread_init 吗?