If-Anweisung in C ++ mit leerem Rumpf: Ist die Bedingung garantiert ausgewertet?

8

Angesichts dieser Aussage (die als Nebenbemerkung nicht mein bevorzugter Kodierungsstil ist)

%Vor%

Gewährleistet 'der C ++ Standard', dass die Funktion aufgerufen wird? (Der Rückgabewert hat keine Auswirkung auf den Ausführungspfad, also der Compiler kann den Ideen der Abkürzungsevaluation folgen und sie optimieren.)

    
philipp 22.10.2015, 09:10
quelle

1 Antwort

8

Da kein Kurzschlussoperator beteiligt ist, wird die Funktion garantiert aufgerufen, wenn sie nicht ohne die Beseitigung von Nebenwirkungen optimiert werden kann. Den C ++ 11-Standard zitieren:

  

[...] konform   Implementierungen sind erforderlich, um (nur) das beobachtbare Verhalten der abstrakten Maschine wie erläutert zu emulieren   unten. 5

     

5 Diese Bestimmung wird manchmal als "als-ob" -Regel bezeichnet, [...] eine tatsächliche Implementierung braucht keinen Teil eines Ausdrucks zu bewerten   wenn es folgern kann, dass sein Wert nicht verwendet wird und dass es keine Nebenwirkungen gibt   Auswirkungen auf das beobachtbare Verhalten des Programms werden produziert.

Also, etwas wie

%Vor%

könnte möglicherweise weg optimiert werden, aber

%Vor%

darf nicht.

Zusätzlich können Sie seit C ++ 11 anspruchsvollere Funktionen schreiben und sie trotzdem zur Kompilierzeit auswerten, indem Sie constexpr .

    
Downvoter 22.10.2015, 09:12
quelle

Tags und Links