Tipo de devolución del operador de asignación
Cuando se define un operador de asignación, siempre se ve así:
class X {...};
X& X::operator=(...whatever...);
Es decir, tiene el tipo de retorno "referencia a X". Aquí, los parámetros (...whatever...
) puede serX&
, const X&
, sóloX
cuando se usa ellenguaje de copia e intercambio, o cualquier otro tipo.
Parece extraño queTodo el mundo recomienda devolver una referencia no constante aX
, independientemente de los parámetros. Esto permite expresamente expresiones como(a = b).clear()
, que se supone que es bueno.
Tengo una opinión diferente, y quiero rechazar expresiones como(x=y).clear
, (x=y)=z
e inclusox=y=z
en mi codigo Mi idea es que estas expresiones hacen cosas demasiado complejas en una sola línea de código. Así que decidí que me devuelvan los operadoresvoid
:
void X::operator=(X) {...}
void X::operator=(int) {...}
¿Qué efectos negativos tiene esto? (excepto luciendo diferente de lo usual)
¿Se puede usar mi clase X con contenedores estándar (por ejemplo,std::vector<X>
)?
Estoy usando C ++ 03 (si eso importa).