Precedencia del operador para "<<" y "++" en VS2008 con optimización
Estoy atrapado con un extraño problema de C ++ VS2008, que parece que no se respeta la prioridad del operador.
Mi pregunta es cuál es el resultado de esto:
int i = 0;
std::cout << ((i != 0) ? "Not zero " : "zero ") << ++i << std::endl;
Normalmente el++
tiene prioridad sobre el<<
, ¿derecho? O es el<<
considerado como una llamada de función que le da una prioridad más alta que la++
? ¿Cuál es la respuesta estándar 100% correcta a esto?
Para verificar, creé un nuevo proyecto vacío (aplicación de consola VS2008), pegué solo este código en el principal y aquí están los resultados:
Debug|Win32: “zero 1”
Release|Win32: “zero 1”
Debug|x64: “zero 1”
Release|x64: “Not zero 1”
Por cierto, el siguiente ejemplo produce exactamente los mismos resultados:
i = 0;
printf("%s %d\n", ((i != 0) ? "Not zero" : "zero"), ++i);
Y también cambiar el tipo de optimización en la versión no tiene ningún efecto, pero deshabilitar las salidas de optimización "cero 1" como otras configuraciones.