2017-12-09 2 views
0

Ich möchte bestätigen, ob eine bestimmte Art Optimierung, die mir in den Sinn kam, möglich ist.Wird die Inline-Funktion den externen Zustand vermeiden?

// test.h 
class Test 
{ 
public: 
    static void Main(); 

private: 
    __forceinline static bool func1() 
    { 
     return ((externalCond1 && externalCond2) ? true : false); 
    } 
} 

// test.cpp 
#include "test.h" 

void Test::Main() 
{ 
    if(func1() == true) 
    { 
     //Do something 
    } 
} 

Würde die Bedingung bei Main dank der inlined func1 wegoptimiert werden und verhindern, dass es tatsächlich getestet wird? (was dazu führt, dass nur die Bedingungen innerhalb von func1 getestet werden).

Dies ist nur ein Beispielcode. Aber da meine echte Inlined-Funktion ohnehin so kurz ist, würde ich einfach die Bedingungen innerhalb von func1 an alle Stellen kopieren, die diese Funktion aufrufen wollten, wenn sich herausstellt, dass diese Optimierung unmöglich ist.

Schließlich möchte ich wissen (nur wenn die Optimierung möglich ist), ob es einfach ein Fall des "Return Value Optimization" -Paradigmas wäre.

+3

Ein C++ - Compiler ist erlaubt, aber nicht erforderlich, um eine Optimierung zu verwenden, die keine beobachtbaren Auswirkungen hat. Ihre gewünschte Optimierung hat keine beobachtbaren Auswirkungen. Ihr C++ - Compiler kann diese Optimierung nach eigenem Ermessen implementieren oder nicht. Es ist erlaubt, dies zu tun, ist aber nicht dazu verpflichtet. In der Regel hängt die Durchführung dieser Optimierung von den spezifischen Kompilierungsoptionen ab, die Sie beim Kompilieren des Codes auswählen. –

Antwort

0

Wenn das __forceinline Attribut geehrt wird, der Code äquivalent zu

void Test::Main() 
{ 
    if (((externalCond1 && externalCond2) ? true : false) == true) 
    { 
     //Do something 
    } 
} 

Wenn Ihre Bedingungen im Sinne extern sind von Variablen außerhalb dieser Kompilation Einheit ist, dann können sie nicht weg optimiert werden, da ihre Werte unbekannt zur Kompilierzeit.

Verwandte Themen