Operator postinkrementacji

0

Witam
Mam taki kod:

#include<iostream>

void function(int a, int b, int c, int d)
{
  std::cout << a << " " << b << " " << c << " " << d << std::endl;
}

int main()
{
    int b = 0;
    function(++b,++b,++b,++b);
    function(b++,b++,b++,b++);

    return 0;
}

Program zwraca:
4 4 4 4
7 6 5 4

Wie ktoś może dlaczego tak sie wyświetla w przypadu użycie operatora postinkrementacji jako argumentu funkcji?
Czy ma to związek z odkladaniem na stos? A także czemu są czwórki na początku a nie np. 1,2,3,4...
Podobny kod w Javie wyświetla:
1 2 3 4
4 5 6 7 ...

0

Podobny kod w Javie wyświetla

poniewz Java ma zdefiniowane, ze kompilator MUSI wykonywac operacje rownorzedne od lewej do prawej.
C++ nie ma takiego zalozenia.
operacje rownorzedne, moga byc wykonywane w dowolnej kolejnosci

function(++b,++b,++b,++b);
moze wykonac sie rownie dobrze:
int e = ++b
int f = ++b
int g = ++b
int h = ++b
f(e,f,g,h)

jak i
int h = ++b
int g = ++b
int f = ++b
int e = ++b
f(e,f,g,h)

jak i
int g = ++b
int e = ++b
int h = ++b
int f = ++b
f(e,f,g,h)

a jesli operator++ zaimplementowano jako zwracajacy const&, to...
int & g = ++b
int & e = ++b
int & h = ++b
int & f = ++b
f(e,f,g,h)

chociaz, imho, dziwny pomysl

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