Я не понимаю, что на самом деле обещает функция-член const в C++.
Насколько я понимаю, объявление функции-члена как const означает, что она обещает не изменять объект. Однако в приведенном ниже примере функция const изменяет объект, отбрасывая const и обновляя внутреннее состояние. Почему это не неопределенное поведение? Обратите внимание, что value_ и вычисляемый_ также не являются изменяемыми.
class LazyValue {
public:
int value() const {
if (!computed_) {
const_cast(this)->compute();
}
return value_;
}
private:
void compute() {
value_ = expensive();
computed_ = true;
}
bool computed_ = false;
int value_;
};
Подробнее здесь: https://stackoverflow.com/questions/798 ... ect-how-is
Мобильная версия