Es gibt keinen Kurzschluss Betreiber beteiligt, so wird die Funktion garantiert aufgerufen werden wenn es nicht weg optimiert werden kann, ohne Nebenwirkungen zu beseitigen. Unter Angabe der C++ 11-Standard:
[...] konforme Implementierungen sind erforderlich, um (nur) das beobachtbare Verhalten der abstrakten Maschine zu emulieren wie unten erläutert.
Diese Bestimmung wird manchmal als „as-if“ -Regel [...] eine tatsächliche Umsetzung muss nicht Teil eines Ausdrucks zu bewerten, wenn es, dass sein Wert nicht und verwendet ableiten kann keine Nebenwirkungen Auswirkungen auf das beobachtbare Verhalten des Programms werden produziert.
So etwas wie
int doSomething() { return 1; }
könnte weg optimiert werden, aber
int doSomething() { std::cout << "d\n"; return 1; }
nicht gestattet.
Darüber hinaus können Sie seit C++ 11 komplexere Funktionen schreiben und sie dennoch zur Kompilierzeit mithilfe von constexpr
ausgewertet werden.
Ja, der Standard garantiert dies und ein Optimierer darf den semantischen Effekt nicht ändern. –
Sie können einfach '(void) doSomething();' schreiben, wenn Sie den Rückgabewert explizit verwerfen möchten. – Useless