const_casting修改一个可变字段是否安全?

4

考虑以下C++03程序:

#include <iostream>

struct T
{
    mutable int x;

    T() : x(0) {}
};

void bar(int& x)
{
   x = 42;
}

void foo(const T& t)
{
   bar(const_cast<int&>(t.x));
}

int main()
{
   T t;
   foo(t);
   std::cout << t.x << '\n';
}

似乎工作正常,但它是否绝对安全?

我只是修改一个mutable字段,但完全剥离其const上下文让我感到不安。

1个回答

8

这是安全的,但也是不必要的。由于存在 mutablet.x 已经是类型为 int& 的了。如果完全删除强制转换,你的示例程序就能正常工作


哦,该死...我没有成功将在我的真实项目中使字段“可变”的头更改上传到编译服务器,因此我错过了该字段已经是非“const”类型的事实。这使得整个问题都变得无意义了... 嘿嘿。谢谢 :) - Lightness Races in Orbit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接