C ++ имеет функцию под названием mutable
, в которой элемент данных может быть изменен даже через постоянную ссылку :
class Foo {
public:
int a;
mutable int b;
};
int main() {
Foo f;
f.a = 1; // ok
f.b = 2; // ok
const Foo &g = f;
g.a = 1; // compile error
g.b = 2; // ok
}
Я получаю следующую ошибку:
In function 'int main()':
Line 12: error: assignment of data-member 'Foo::a' in read-only structure
compilation terminated due to -Wfatal-errors.
Тем не менее, присвоение g.b = 2;
успешно.
Эта функция обычно используется только для private
переменных-членов, когда изменение элемента данных не влияет на внешнее видимое постоянство элемента.объект.Например, его можно использовать в качестве оптимизации, чтобы обеспечить способ кэширования ранее рассчитанных значений.