Este código fornece resultados diferentes no XCode e no Visual Studio:
#include <iostream>
using namespace std;
int f() {
cout << 'A';
return 1;
}
int main() {
cout << '.' << f();
return 0;
}
No Visual Studio ele gera
A.1
No XCode ele gera
.A1
Obviamente, eu esperaria que ambos os compiladores produzissem a mesma coisa. É de se esperar que não faça isso? É uma coisa conhecida ou há algo que eu possa fazer sobre isso?
Aparentemente, o MSVC compila o código de maneira diferente do GCC.
A inspeção do código assembly por meio do Godbolt (usando x86-64 gcc 13.2 e x64 msvc v19.38) mostra que o MSVC produz o seguinte assembly para a
main
função:... enquanto o GCC produz isto:
Na saída MSVC,
f()
é chamado antes do primeirooperator<<
, enquanto o GCC chamaf()
depois de chamar o primeirooperator<<
onstd::cout
.A razão para isso é que em C++, a ordem de avaliação não é especificada :