Precedência do operador para “<<” e “++” no VS2008 com otimização
Estou com um problema estranho do VS2008 C ++, que parece que a precedência do operador não é respeitada.
Minha pergunta é qual é o resultado disso:
int i = 0;
std::cout << ((i != 0) ? "Not zero " : "zero ") << ++i << std::endl;
Normalmente o++
tem precedência sobre o<<
, direito? Ou é o<<
considerada como uma chamada de função, dando-lhe uma precedência mais alta++
? Qual é a resposta padrão 100% correta para isso?
Para verificar, criei um novo projeto vazio (aplicativo de console do VS2008), colei apenas esse código no principal e eis os resultados:
Debug|Win32: “zero 1”
Release|Win32: “zero 1”
Debug|x64: “zero 1”
Release|x64: “Not zero 1”
Btw, o exemplo a seguir produz exatamente os mesmos resultados:
i = 0;
printf("%s %d\n", ((i != 0) ? "Not zero" : "zero"), ++i);
E também alterar o tipo de otimização na liberação não tem efeito, mas desabilitar as saídas de otimização “zero 1” como outras configurações.