Страницы

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

среда, 12 декабря 2018 г.

Почему operator++ должен возвращать const T?

const T T::operator++(int) { T tmp = *this; ++(*this); return tmp; }
Рассмотрим такой вариант реализации постфиксного оператора инкрементирования. Почему требуется возвращать именно const T, а не T? Такой вариант реализуется для типа int, а нужно ли мне реализовывать этот оператор для своего пользовательского типа аналогично?
Я придерживался негласного правила, что при разработке классов (типов) в случае если непонятно (или еще не сформулировано) требуемое поведение то следует организовать поведение, какое предоставляет int. int возвращает const int. А нужно ли и мне так?


Ответ

Нет необходимости делать возвращаемый тип константым, чтобы избежать двойного инкремента ++++. Достаточно объявить оператор инкремента только для lvalue объектов (добавить & в сигнатуру):
struct T { T operator++(int) & { return *this; } };
int main() { T t;
t++; // ok t++++; // ошибка }

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

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