const
- это обещание, что вы не измените эту вещь. Вы можете давать обещания не изменять параметр, не изменять то, на что указывает указатель (или ссылка ссылается), не изменять this
-объект (в функции-члене) и т. Д. Для возвращаемого значения "обещание" является обязательным для вызывающей стороны, так что на самом деле это больше похоже на то, что вы не разрешаете вызывающей стороне изменять возвращаемую вещь.
Это более полезно с указателями и ссылками (особенно ссылками, поскольку в C ++ мы предпочитаем не передавать по указателю, если нам это не нужно), чем со значениями, поскольку передача по значению в любом случае делает копию; вызывающая сторона не заботится, меняет ли вызываемая функция свою собственную копию значения. Но если мы передадим по ссылке, const
даст нам знать, что функция не изменит наше значение через ссылку.
Точно так же, когда мы возвращаем что-то по ссылке, мы обычно ссылаемся на уже существующую вещь - возможно, чаще всего, мы возвращаем некоторый элемент данных по ссылке из функции-члена. В этом случае const
запрещает вызывающей стороне использовать эту ссылку для изменения объекта. Это, опять же, облегчает рассуждения о том, что делает код, и защищает от ошибок. Обычно функции доступа доступны парами: одна неконстантная версия и одна константная версия, где и возвращаемое значение, и объект this являются const. (Мы создаем this-объект const, помещая const
в end сигнатуры функции, после закрывающей скобки списка параметров.) Значение: "вызов этой функции не повлияет на объект, если вызывающая сторона не изменяет объект через возвращенную ссылку ". Если у вызывающей стороны есть экземпляр const класса, тогда может быть возвращена только ссылка на const.
Подробнее читайте http://www.parashift.com/c++-faq-lite/const-correctness.html.