Влад: Ага, то есть года пишем аргумент (const int var) - мы запрещаем изменять лишь этот аргумент. А во втором случае запрещаем изменять сам объект (this)? Спасибо! Теперь понял
DmitryProsh: да, внутри этого метода объект не должен изменяться. Если мне не изменяет память, то гарантировать это должен программист, т.е. компилятор не может это проверить.
Возвращаемое значение есть смысл помечать, когда возвращаетесь ссылку или указатель. Например как у вас - const float - бессмысленно.
И это всё относится на только к операторам, но и к любым методам.
Денис Загаевский: Компилятор как раз проверяет, чтобы из константных методов не было доступа на запись к полям класса, а так же вызовов любых неконстантных методов. Иногда это вызывает на первый взгляд странные ошибки компиляции, но в итоге выясняется, что компилятор как раз спас вас от трудноуловимой логической ошибки. Поэтому стоит пользоваться модификатором const везде, где только это возможно. Это же рекомендует Скотт Майерс.
Еще существует модификатор mutable для полей, которые могут быть доступны на запись из константных методов. Но не стоит злоупотреблять этим. Единственное оправданное применение mutable полей - это кеширование результатов вычислений в константных объектах.
Насчет возврата константы: это может имеет смысл для объектов, и не имеет смысла для примитивных типом.
nirvimel
> Единственное оправданное применение mutable полей - это кеширование результатов вычислений в константных объектах.
.. или же ленивые вычисления) вообще, стоит говорить о const this и о mutable в контексте изменения _видимого_ состояния. Т.е. если, например, кэширование значения не меняет видимого состояния и поведения объекта (т.е. он семантически остаётся неизменным), то использование mutable оправдано. Врочем, под это описание как раз и попадают все виды кэширования, как и вы и указали.