Нет, у вас нет для возврата ссылки на ваш объект, когда вы перегружаете оператор предварительного увеличения.На самом деле вы можете вернуть все, что захотите, MyClass
, int
, void
, что угодно.
Это проблема дизайна - вы должны спросить себя, что является самым полезным дляпользователей вашего класса, которые вы можете вернуть.
Как правило, операторы классов наиболее полезны, когда они вызывают наименьшую путаницу, т. е. когда они работают наиболее похожими на базовые типы операторов.В этом случае оператор предварительного увеличения базового типа:
int i = 7;
j = ++i;
увеличивает переменную и возвращает новое значение.Если это единственное использование, которое вы хотите иметь MyClass
, то достаточно вернуть копию вашего класса.
Но оператор предварительного увеличения базового типа фактически возвращает значение lvalue.Итак, это законно:
int i = 7;
int *p = &++i;
Если вы хотите поддержать такую операцию, вы должны вернуть ссылку.
Есть ли конкретная причина, по которой вы не хотите возвращатьсяссылка?Разве это не правильно сформулированная концепция для вашего конкретного класса?Если это так, рассмотрите возможность возврата void
.В этом случае это выражение: ++myObject
допустимо, а myOtherObject = ++myObject
- нет.