Tipo de retorno do operador de atribuição

Ao definir um operador de atribuição, ele fica invariavelmente assim:

class X {...};

X& X::operator=(...whatever...);

Ou seja, tem o tipo de retorno "referência ao X". Aqui, parâmetros (...whatever...) pode serX&, const X&, somenteX ao usar oidioma de cópia e trocaou qualquer outro tipo.

Parece estranho quetodo mundo recomenda retornar uma referência não-const paraX, independentemente dos parâmetros. Isso permite explicitamente expressões como(a = b).clear(), o que é suposto ser bom.

Eu tenho uma opinião diferente, e eu quero proibir expressões como(x=y).clear, (x=y)=z, e até mesmox=y=z no meu código. Minha ideia é que essas expressões fazem coisas muito complexas em uma única linha de código. Então decidi que meus operadores de atribuição retornassemvoid:

void X::operator=(X) {...}
void X::operator=(int) {...}

Quais efeitos negativos isso tem? (exceto parecer diferente do habitual)

Minha classe X pode ser usada com contêineres padrão (por exemplo,std::vector<X>)

Eu estou usando o C ++ 03 (se isso importa).

questionAnswers(1)

yourAnswerToTheQuestion