Зависит от того, что вам нужно.
Во-первых, о ваших версиях - очевидно,
- «Вариация - 1» создает новый объект, не касаясь двух операндов.
- «Variation - 2» сохраняет результат во втором операнде
- «Variation - 3» сохраняет результат в первом операнде в «this».
Скорее всего, вариант - 1 является наиболее предпочтительным.
Почему?Из-за побочных эффектов.Если вы видите выражение вроде:
a = b + c;
независимо от типа a
, b
и c
, что бы вы подумали?Я думаю, что a
- это сумма b
, а c
И b
и c
- нетронутыми, я имею в виду - со старыми значениями.
Предположим, например:
a = 5;
b = 6;
c = a + b;
Ожидаете ли вы, что a
или b
станет 11
после суммы?(что произойдет, если вы выбрали вариант 2 или 3).Конечно, вы не можете перегрузить operator+
для int
, но это просто и интуитивно понятный пример.
Одно улучшение производительности: в вашем варианте 1 вместо
MyClass operator+(MyClass rhsObj)
Я бы использовал
MyClass operator+(const MyClass& rhsObj)
Таким образом, вы избежите одной дополнительной копии + вы скажете «клиенту», используя ваш код, что вы не изменили rhsObj
вообще, но просто используйте его значение.