Cześć :)
Załóżmy taką sytuację:
if( obietk1 = funkcja_zwracająca_obietk_1 )
Czy dobrze myślę, że:
Tu będzie się to odbywać tak:
Ponieważ zdefiniowany operator= zwraca referencję na obiekt to w zależności od tego co jest po prawej stronie będzie to wglądało tak:
Jeżeli prawa strona jest NULL to warunek fałszywy.
else true;
Jeżeli nie jest tak, proszę mnie nakierować ;)
0
1
bar = foo()
->
if(bar)
->
if((bar = foo())!=null)
->
if(bar = foo())
0
ok, czyli rozumiem, że następuje przypisanie wartości do lewej strony i zbadanie czy jest prawdą?
1
Po przypisaniu nie ma lewej, czy prawej. Jest wartość*.
*w uproszczeniu
0
po przypisaniu zostaje ci to, co zwraca operator przypisania. normalnie powinien zwracać referencję do zmiennej z lewej strony przypisania. (jest to już po przypisaniu, więc jej wartość powinna wynosić tyle co prawa strona).
ale operator=
może (nie powinien) zwracać cokolwiek, nawet void
. wtedy nie da się użyć składni if (a=b)
.