Darf der Compiler die Auswertung von Unterausdrücken in verschiedene Funktionsargumente einbinden?
Ich frage mich über die folgende Situation:
void f(int a, int b) { }
int a(int x) { std::cout << "func a" << std::endl; return 1; }
int b(int x) { std::cout << "func b" << std::endl; return 2; }
int x() { std::cout << "func x" << std::endl; return 3; }
int y() { std::cout << "func y" << std::endl; return 4; }
f(a(x()), b(y()));
Nach dem Lesenhttp: //en.cppreference.com/w/cpp/language/eval_orde Ich habe immer noch Schwierigkeiten zu verstehen, ob die folgende Auswertungsreihenfolge möglich ist:
x()
->y()
->a()
->b()
oder dass der Standard garantiert, dassa(x())
undb(y())
wird sozusagen als Einheit ausgewertet.
Mit anderen Worten, gibt es eine Möglichkeit, dass dies gedruckt wird
func x
func y
func a
func b
Running dieser Test auf GCC 5.4.0 gibt meiner Meinung nach logischer
func y
func b
func x
func a
aber das sagt mir natürlich nichts darüber aus, was der standard verlangt. Es wäre schön, einen Hinweis auf die Norm zu bekommen.