#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.