Должен ли перегруженный оператор = возвращать класс & или класс - PullRequest
1 голос
/ 07 марта 2012

пока гуглял как перегрузить оператор = я обнаружил, что некоторые примеры возвращаемое значение http://www.cprogramming.com/tutorial/operator_overloading.html
в то время как мой друг, гуру C ++, давным-давно сказал мне вернуть ссылку. Также, например, когда я смотрю на источник STL, я вижу такие вещи:

  vector&
  operator=(const vector& __x);

так, как правильно это сделать?

Кстати, если вам любопытно, мой друг сказал мне, что причина возврата ref заключается в том, что встроенные типы возвращают l-значение.

int x;
(x = 3) += 2;
// x is now 5.

Ответы [ 3 ]

5 голосов
/ 07 марта 2012

За исключением особых случаев, когда вы действительно, действительно знаете, что делаете, должно возвращаться либо class&, либо void.(И большую часть времени возвращение void должно быть просто заполнителем для "Я ленивый и не удосужился убедиться, что возвращение class& имеет смысл")

Возвращение class плохая идея, потому что она тратит впустую время и память (она делает копию!) в обычном случае, когда пользователь не использует возвращаемое значение, и полностью введет в заблуждение пользователя, который фактически использует возвращаемое значение (и все еще тратит впустую)время копий).

3 голосов
/ 07 марта 2012

Да, он должен возвращать ссылку на себя.

1 голос
/ 07 марта 2012

Всегда полезно использовать ссылку, так как и память, и время сохраняются. Если вы передаете по значению, должен быть создан новый объект, должен быть вызван конструктор копирования. Что дороже по времени и по памяти.

поэтому передавайте его по ссылке всегда, если только у вас нет острой необходимости передавать / возвращать по значению.

...