6

Hier ist mein Code:Kann nicht Standard-Zuweisungsoperator erzeugen, wenn ein Klassenmitglied ist eine Referenz (in C++)

class NO { 
    public: 
    NO(std::string& name):nameValue(name){}; 

    private: 
    std::string& nameValue;   // this is now a reference 

}; 

int main(){ 

    int b=10,c=20; 
    int& d=b; 
    d=c; 

    std::string p="alpha", q="beta"; 

    NO x(p), y(q); 
    x=y; 

    return 0; 

} 

ich den Fehler:

"non-static reference member ‘std::string& NO::nameValue’, can’t use default assignment operator" 

Warum kann ich nicht wieder -zuweisen Sie das Objekt mit einem Referenzelement, wenn ich das gleiche mit einem eingebauten Typ tun kann?

dank

+0

Ich denke, das sollte funktionieren, aber ... mit welcher Semantik? Was müssen wir erwarten? 'x.nameValue' muss auf' y.nameValue' zeigen ODER 'x.nameValue' muss den Wert von' y.nameValue' kopieren? (Das wäre das gleiche wie 'p = q') –

Antwort

4

Eine Referenz kann initialisiert, aber nicht zugewiesen werden. Sobald die Referenz initialisiert ist, wird sie weiterhin auf das gleiche Objekt verweisen, solange es existiert. Wenn Sie keinen Zuweisungsoperator definieren, wird der Compiler einen assemblieren, der die Zuweisung von Elementen übernimmt, aber in diesem Fall ist das unmöglich, daher kann/wird der Compiler überhaupt keinen Assembler erzeugen.

Sie können einen Zuweisungsoperator selbst definieren. Es liegt an Ihnen, genau zu entscheiden, wie Sie mit einem Mitglied umgehen, das eine Referenz ist. Meistens definieren Sie Ihr Objekt jedoch so, dass es keine Referenzen enthält.

Wenn Sie sich damit befassen, ist die primäre Verwendung für Referenzen fast sicher als Parameter. Als Mitglieder einer Klasse ergeben sie nicht oft Sinn, und in dem seltenen Fall, dass sie sinnvoll sind, sollten die Objekte dieser Klasse die Zuweisung wahrscheinlich nicht unterstützen.