È ampiamente noto (sebbene non ampiamente> <) che C e C++ non specificano l'ordine in cui vengono valutati i parametri di una funzione. Cioè, i due puts()
s indicati possono verificarsi in qualsiasi ordine, come scelta compilatore arbitraria:La valutazione di una chiamata di funzione è "questo" in un ordine non specificato relativamente ai parametri?
#include <cstdio>
int Function1() {
std::puts("Function1");
return 1;
}
int Function2() {
std::puts("Function2");
return 2;
}
int Add(int x, int y) {
return x + y;
}
int main() {
return Add(Function1(), Function2());
}
Tuttavia, questo si applica anche alla valutazione della this
sul lato sinistro del .
, .*
, ->
o ->*
operatori? In altre parole, l'ordine dello puts()
è inferiore a anche non specificato?
#include <cstdio>
struct Struct {
Struct() { std::puts("Struct::Struct"); }
int Member(int x) const { return x * 2; }
};
int Function() {
std::puts("Function");
return 14;
}
int main() {
return Struct().Member(Function());
}
Secondo http://en.cppreference.com/w/cpp/language/eval_order, l'ordine è _unspecified_ in entrambi i casi. –