Espacios de nombres
Variantes

Orden de evaluación

De cppreference.com
 
 
 
 

El orden de evaluación de cualquier parte de cualquier expresión, incluyendo el orden de evaluación de los argumentos de función está no especificado (con algunas excepciones como se lista abajo). El compilador puede evaluar los operandos y otras subexpresiones en cualquier orden, y puede escoger otro orden cuando la misma expresión se evalúa de nuevo.

No existe un concepto de evaluación de izquierda a derecha o de derecha a izquierda en C++. Esto no debe confundirse con la asociatividad de los operadores de izquierda a derecha y de derecha a izquierda: la expresión a() + b() + c() se analiza como (a() + b()) + c() debido a la asociatividad de izquierda a derecha del operador +, pero la llamada de función a c puede evaluarse primero, al último, o entre a() o b() en tiempo de ejecución:

#include <cstdio>
int a() { return std::puts("a"); }
int b() { return std::puts("b"); }
int c() { return std::puts("c"); }
void z(int, int, int) {}
int main() {
    z(a(), b(), c());       // todas las 6 permutaciones de salida se permiten
    return a() + b() + c(); // todas las 6 permutaciones de salida se permiten
}

Posible salida:

b
c
a
c
a 
b