Страницы

Поиск по вопросам

понедельник, 10 декабря 2018 г.

Зачем нужен const в сигнатуре функции?

Например, у меня есть следующий код.
#include using namespace std; class X { int x; public: X(int i = 2): x {i} {}
void print() const {cout << x;} // ^^^^^ int getx() const {return x;} // ^^^^^ X operator-(const X& rop) {return x + 2*rop.x;} // ^^^^^ int operator-(int rop) {return 2*x + rop;}
};
int operator-(int lop, const X& rop) { // ^^^^^ return lop – rop.getx(); }

int main() { X x {6},y; cout << x – 3 – y; return 0; }
Подскажите, пожалуйста, каково назначение ключевого слова const в сигнатуре функций?


Ответ

Чтобы этот код мог работать с константными объектами. Это const означает, что вызов метода print() не изменит состояния объекта.
void print() const {cout << x;} int getx() const {return x;}
Здесь вы никак не меняете объект класса - поэтому нет никакого смысла делать НЕ const (мое мнение - лучше делать все, что только можно, с const, применяя его по умолчанию, и не использовать его только там, где это необходимо), зато эти методы можно будет вызвать, например, при передаче объекта в качестве константного параметра - вот как тут:
X operator-(const X& rop) {return x + 2*rop.x;}
Вы же никак не меняете rop, так что можете теперь вызывать оператор для любого объекта, в том числе временного.
Кстати, операторы я бы тоже делал константными, типа
X operator-(const X& rop) const {return x + 2*rop.x;}
поскольку они никак не меняют состояние объекта.

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

Отправить комментарий