Wie ktos moze, dlaczego kompilator C++ tego nie przepuszcza:
int a=9;
cout<< ++(a--) ;
Wie ktos moze, dlaczego kompilator C++ tego nie przepuszcza:
int a=9;
cout<< ++(a--) ;
Bo a-- zwraca r-value czyli wartość tylko do odczytu (bo to jest wartość tymczasowa istniejąca teoretycznie tylko w chwili wywołania funkcji --) a operator pre-inkrementacji wymaga od nas l-wartości bo ten operator zmienia obiekt który do niego przesyłasz.
czyli to jest ok?
(++a)--
Użycie dwa razy ++/-- na jednej zmiennej w jednym wyrażeniu (ściśle, bez sequence pointa) to tak czy inaczej undefined behaviour (UB).
Czyli nie, to nie jest ok.
hmm, ten przypadek (++a)-- , przechodzi bezbłędnie.
Być może kompiluje się bezbłędnie, lecz jest to UB.
Coś jak:
int a = 1;
a = a++ + ++a;