Рассмотрим следующую программу на 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
контекст полностью заставляет меня нервничать.
Это безопасно, но и не нужно. Из-за mutable
, t.x
уже типа int&
, Ваш пример программы работает хорошо, если актерский состав полностью удален.
Других решений пока нет …