Warum gibt der operator= eine Referenz zurück und nicht den eigentlichen Wert? Ich versteh das nicht so ganz!
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
"=" ist ein Zuweisungoperrator, dass ist hoffentlich klar.
ein kleines beispiel:
void main(void)
{
int a,b;
b = 5;
a = 4 + 5 * b;
}
das ergebnis hierbei wäre (25 + 4) = 29.
"=" wäre die Referenz aus der Rechung
ich habe mal einen schönes satz gelesen, der glaub ich deine frage beantworten sollte:
"MAN NIMMT DEN WERT AUF DER RECHTEN SEITE UND SPEICHERT IHN IN DER VARIABLE AUF DER LINKEN SEITE UND GIBT DEN resultierend WERT UND TYP DES AUSDRUCKS AUF DER LINKEN SEITE ZURÜCK"
Ja aber ich kann doch selber einen operator= deklarieren, der void zurück gibt und keine Referenz. Trotzdem funktioniert eine Zuweisung mit diesem selbstgemachten Operator!
Beisp:
void CTreeCursor::operator =(const CTreeCursor& posSrc)
{
if(&posSrc != this)
{
m_hTreeItem = posSrc.m_hTreeItem;
m_pTree = posSrc.m_pTree;
}
}
Deswegen bleibt aber trotzdem die Rechtsassoziativität bestehen!
Eine Zuweisung '=' ist rechtsassosiativ weil der operator= etwas liefern muß, was selber auf der rechten Seite einer Zuweisung stehen darf!
Sonst würde ja auch keine Verkettung funktionieren:
void Verkettung( int wert1, int wert2, int wert3, int wert4)
{
wert1 = wert2 = wert3 = wert4;
}
Der Compiler macht daraus mathematisch gesehen folgendes:
wert1 = ( wert2 = ( wert3 = wert4 ) )
Wie Klammern aufgelöst werden, solltest du ja in der Schule gelernt haben :-)