przekazywanie argumentów do funkcji

Odpowiedz Nowy wątek
2006-12-17 17:01
__m__
0

Witam
Mam problem ze zrozumieniem sposobu działania przekazywania argumentow do funkcji.
Konkretnie, czy moglibyście mi wyjaśnić dlaczego taki kawałek kodu:

int g=1;
cout<<g++<<" "<<g++<<" "<<g++<<"\n";

Wypisuje: "3 2 1", a nie "1 2 3"?
Kompletnie tego nie rozumiem :(
Z góry dzięki za wyjaśnienia

Pozostało 580 znaków

2006-12-17 17:25
_kita
0

u mnie wypisuje "1 2 3" :-)

Pozostało 580 znaków

2006-12-17 19:45
__m__
0

hmm... nie do konca wyjasnia mi to w czym jest problem :(

z jakiego kompilatora korzystasz?
ja kompilowalem to g++ na dwoch roznych serwerach, kompilowalem visualem pod winda - i zawsze ten sam efekt: "3 2 1" :(

Pozostało 580 znaków

2006-12-17 19:50
0

Skopiowałem ten fragment kodu do DevC++ i wyświetla "1 2 3". Na 100%.
Tak tesh powinno być :-)

Pozostało 580 znaków

2006-12-17 20:55
0

Kompilator ma dowolność jeżeli chodzi o kolejność obliczania parametrów funkcji.


Pozostało 580 znaków

2006-12-17 21:52
0

No ale chwila. Tu mamy do czynienia z funkcjami operatorowymi. A ich wywołanie jest już w określonej kolejności. Potem potestuje. Ogólnie odradzam używania takich zapisów, bo zawsze są z tym problemy.


Pozdrawia DzieX

int getRandomNumber() { return 4; }

Pozostało 580 znaków

2006-12-17 23:47
__m__
0
lmmilewski napisał(a)

Kompilator ma dowolność jeżeli chodzi o kolejność obliczania parametrów funkcji.

Racja to wszystko wyjasnia, i to mimo tego, ze rzeczywiscie mamy tu tez operator <<, gdyz wyzszy priorytet ma tutaj ++. To co dostaniemy na wyjsciu zalezy od tego, ktora sposrod tak samo uprzywilejowanych 3 operacji inkrementacji zostanie wykonana jaki pierwsza, a kolejnosc operacji << nie ma znaczenia.
Dzieki za pomoc :)

Pozostało 580 znaków

2006-12-18 00:07
0

Na kompilatorze g++ wypisuje: 3 2 1

A teraz mistrzostwo, na VC++ 8.0 wypisuje 1 1 1 :-|


Pozdrawia DzieX

int getRandomNumber() { return 4; }

Pozostało 580 znaków

2006-12-19 13:00
0

Może to być związane z tym, że operacje wypisywania na ekran są wykonywane od prawej strony, dlatego jest wyświetlane "3 2 1". Operator <<

Ja sprawdzałem na C++ Builder 6 i też mam "3 2 1"

Pozostało 580 znaków

2006-12-21 20:37
borli
0

W prawidłowej kolejności wyświetla po rozbiciu tego na trzy cout-y:

cout<<g++;<br>cout<<g++;<br>cout<<g++;<br>

Może to być związane z tym że kompilator najpierw przygotowuje sobie operacje której wyniki mają być wypisane przez cout-y.

A co do tych trzech jedynek, to to samo jest w Visual C++ 6.0 gdy użyjesz pritnf.
</cpp>

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