Зачем возвращаться по ссылке для цепочки операторов?
Я посмотрел так много ответов о SO, и основная фраза — «возврат по ссылке, чтобы разрешить цепочку операторов», но без объяснения причин я не понимаю, почему я не могу сделать это каким-либо другим способом.
Например, это, кажется, компилируется в моей системе и работает нормально, и цепочка работает:
TestClass operator+=(TestClass tc){
somePrivateValue += tc.somePrivateValue;
return *this;
}
Где я также могу сделать это:
TestClass& operator+=(TestClass& tc){
somePrivateValue += tc.somePrivateValue;
return *this;
}
Исключая тот факт, что второй пример не требует вызова конструктора копирования TestClass
Каковы другие преимущества?
и цепные работы
Нет, это не так.
TestClass a = some_value;
TestClass b = some_other_value;
(a += b) += b;
Теперь проверьте значение a
Однако это сделано. Отражает ли это увеличение b
дважды? Или только один раз?
Других решений пока нет …