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)=ze 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).

Respuestas a la pregunta(1)

Su respuesta a la pregunta