problem - operatory

Odpowiedz Nowy wątek
2013-05-12 02:02
nowy777777
0

Wie ktos moze, dlaczego kompilator C++ tego nie przepuszcza:

int a=9;

cout<< ++(a--) ;

Pozostało 580 znaków

2013-05-12 02:06
3

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.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
Co ciekawe gcc twierdzi, ze operatory pre tez zwracaja rvalue. - n0name_l 2013-05-12 11:15
Niczego takiego nie twierdzi. http://ideone.com/z9ZdGS - Endrju 2013-05-12 15:22
No bo w C nie ma referencji i to jest wartość (edytowałem, kopia to złe słowo) - czyli w C to jest rvalue. W C++ jest to referencja. Niepotrzebnie mieszasz, bo temat był o C++ i o C++ pisałem. - Endrju 2013-05-12 15:29

Pozostało 580 znaków

2013-05-12 09:34
nowy777777
0

czyli to jest ok?

(++a)--

po co ci takie dziwy? - spartanPAGE 2013-05-12 10:11

Pozostało 580 znaków

2013-05-12 14:25
msm
2

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.

Pozostało 580 znaków

2013-05-12 20:05
nowy777777
0

hmm, ten przypadek (++a)-- , przechodzi bezbłędnie.

Pozostało 580 znaków

2013-05-12 20:07
0

Być może kompiluje się bezbłędnie, lecz jest to UB.
Coś jak:

int a = 1;
a = a++ + ++a;

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0