Operator Priorität für "<<" und "++" in VS2008 mit Optimierung
Ich habe ein seltsames VS2008 C ++ - Problem, das so aussieht, als würde die Rangfolge der Operatoren nicht beachtet.
Meine Frage ist, was die Ausgabe davon ist:
int i = 0;
std::cout << ((i != 0) ? "Not zero " : "zero ") << ++i << std::endl;
Normalerweise das++
hat Vorrang vor dem<<
, richtig? Oder ist das<<
wird als Funktionsaufruf betrachtet, der eine höhere Priorität hat als der++
? Was ist die 100% korrekte Standardantwort auf diese Frage?
Um dies zu überprüfen, habe ich ein neues leeres Projekt (VS2008-Konsolen-App) erstellt und im Hauptfenster nur diesen Code eingefügt. Hier sind die Ergebnisse:
Debug|Win32: “zero 1”
Release|Win32: “zero 1”
Debug|x64: “zero 1”
Release|x64: “Not zero 1”
Übrigens liefert das folgende Beispiel genau die gleichen Ergebnisse:
i = 0;
printf("%s %d\n", ((i != 0) ? "Not zero" : "zero"), ++i);
Und auch das Ändern der Art der Optimierung in Release hat keine Auswirkung, aber das Deaktivieren der Optimierungsausgänge "Null 1" wie bei anderen Konfigurationen.