Pourquoi faut-il le copier l'opérateur d'assignation de renvoyer une référence/const référence?

En C++, le concept de renvoi de référence à partir de la copie opérateur d'affectation est pas clair pour moi. Pourquoi ne peut pas le copier opérateur d'affectation de renvoyer une copie de l'objet nouveau? En outre, si j'ai de la classe A, et les suivantes:

A a1(param);
A a2 = a1;
A a3;

a3 = a2; //<--- this is the problematic line

La operator= est définie comme suit:

A A::operator=(const A& a)
{
    if (this == &a)
    {
        return *this;
    }
    param = a.param;
    return *this;
}
  • Il n'y a pas une telle exigence. Mais si vous voulez vous tenir au principe du moins surprize, vous serez de retour A& comme a=b est une lvalue expression faisant référence à a en cas a et b sont entiers.
  • Merci de me laisser savoir! Va le faire
  • Pourquoi ne peux-nous de retour A* de l'opérateur d'assignation de copie je suppose que le chaînage de l'affectation fonctionne encore correctement. Quelqu'un peut-il aider à comprendre les dangers de retour A* si il y a de tout.
  • Remarque: Depuis C++11, il est aussi le déplacer-opérateur d'affectation, tous de la même logique que dans ce Q & A s'applique également à la déplacer-opérateur d'affectation. En fait, ils pourraient être tous les deux la même fonction si a déclaré que A & operator=(A a);, par exemple, prendre l'argument par valeur.
  • La vraie question est de savoir pourquoi vous souhaitez retourner un pointeur. Pensez à la façon moche et ambigu du code de la surcharge d'opérateur et le retour serait le cas si nous n'avions que des pointeurs - dans les affaires les plus importantes, mortellement ambigu (aussi: mortellement laid). Et puis il suffit de lire le langage du créateur mots à propos de tout cela: stackoverflow.com/questions/8007832/...
InformationsquelleAutor bks | 2010-06-23