const_casting是一个可变字段安全吗?

Lig*_*ica 4 c++ const c++03

考虑以下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';
}
Run Code Online (Sandbox Code Playgroud)

似乎有用,但肯定是安全的吗?

我只修改了一个mutable字段,但const完全剥离了它的上下文让我感到紧张.

Tav*_*nes 8

这是安全的,但也是不必要的.因为mutable,t.x已经是类型了int&.如果完全删除了转换,您的示例程序可以正常工作.