Каково намерение сделать функцию «const»

#c #function #constants

#c #функция #константы

Вопрос:

Вот так,

 bool isEmpty() const { return root==NULL; }
 

Это функция isEmpty, проверьте, если по британскому летнему времени на пустое.

Комментарии:

1. fredosaurus.com/notes-cpp/oop-memberfuncs/constmemberfuncs.html

Ответ №1:

Это указывает на то, что функция не изменяет ни одного из членов этого класса.

Обычно интерфейс / объявление (через файл заголовка) предоставляется пользователям класса / функций, а не реализации, поэтому const пользователю становится ясно, что функция не изменяет никаких членов.

Добавление const также позволяет пользователю функции знать, что эти const функции-члены следует использовать, когда у вас есть const объект.Вы не можете вызвать обычную функцию-член для const объекта этого класса, это приведет к ошибке компилятора.

Именно по этой причине функция помечается const , даже если она пуста.Это указывает на контракт между разработчиком функции и пользователем функции.

Комментарии:

1. Кроме того, она может быть вызвана, если у вас есть постоянная версия объекта. Неконстантные функции нельзя вызывать из экземпляра const.

2. @Als вы говорите, что «функции-члены const могут вызываться только для объекта const этого класса». Это неверно: функции-члены const могут быть вызваны и для неконстантных объектов 🙂 Однако, наоборот, это невозможно

3. @TomKnapen: Ах, конечно, английский иногда может сыграть злую шутку (особенно для не носителей английского языка, таких как я) :). Спасибо, я исправил эту опечатку.

4. Если у вас есть постоянная версия объекта, и вы вызываете метод этого объекта, то, если компилятор жалуется, что такой функции нет, это потому, что этот метод не является const .

Ответ №2:

Когда функция помечена как const , функция может быть вызвана в const экземпляре класса. Вызов не const функции для const объекта приведет к ошибке времени компиляции.

По сути, вы хотите пометить все функции, которые не изменяют состояние вашего объекта как const ; таким образом, вы можете использовать const как объявление неизменности, и компилятор применит его для вас, убедившись, что вы можете вызывать только const функции.

Вы можете const без проблем вызывать функции для не- const экземпляра.

Ответ №3:

Это сообщает компилятору, что функция не будет изменять состояние класса. Кроме того, функции const являются единственными функциями, которые разрешено вызывать для объектов const.

Ответ №4:

Это указывает на то, что функция логически постоянна, то есть, что касается пользователей класса, значение члена класса не изменяется функцией. Законно вызывать функции const по ссылкам const и через указатели const.