¿Mejora la seguridad para marcar a los operadores de asignación como solo de valor?
SiT
es un tipo de clase con la firma predeterminada para el operador de asignación, entonces podemos escribir:
T const &ref = ( T{} = something );
que crea una referencia colgante. Sin embargo, con la firma:
T &operator=(T t) &
el código anterior con referencia colgante no se compilará. Esto evitaría algunas situaciones en las que devolvemos un valor l que designa un objeto temporal, situaciones indeseables porque pueden conducir a referencias colgantes.
¿Hay alguna razón para no hacer esto? ¿estaríamos desactivando cualquier caso de uso válido para los operadores de asignación?
Creo que los mismos comentarios pueden aplicarse también a los operadores de asignación compuesta,+=
etc. Un caso más realista podría ser:
std::string const &s = std::string("Hello, ") += "world!";
donde el error tipográfico pasaría desapercibido hasta el tiempo de ejecución UB.