Является ли const_casting изменяемым полем безопасным?

Рассмотрим следующую программу на 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 контекст полностью заставляет меня нервничать.

4

Решение

Это безопасно, но и не нужно. Из-за mutable, t.x уже типа int&, Ваш пример программы работает хорошо, если актерский состав полностью удален.

8

Другие решения

Других решений пока нет …