2017-12-09 18 views
0

私の心に来たある種の最適化が可能かどうかを確認したいと思います。インライン関数は外部条件を避けますか?

// 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 
    } 
} 

Mainの条件はインラインfunc1のおかげで離れて最適化され、そして実際にテストされているから、それを防ぐことでしょうか? (func1内の条件のみをテストすることになる)。

これは単なるコード例です。しかし、私の実際のインライン関数はそれほど短期間であるため、func1内の条件を、この最適化が不可能であると判明した場合、この関数を呼び出したいすべての場所にコピーします。

最後に、「最適化が可能であれば、私は、単に「戻り値の最適化」パラダイムのケースかどうかを知りたいと思います。 __forceinline属性が表彰され

+3

C++コンパイラは、観察可能な効果を持たない最適化を使用することはできますが、必須ではありません。あなたの望む最適化には、観察可能な効果はありません。あなたのC++コンパイラは、この裁量でこの最適化を実装するかもしれません。それは許可されていますが、そうする必要はありません。通常、この最適化が行われるかどうかは、コードをコンパイルするときに選択する特定のコンパイルオプションによって決まります。 –

答えて

0

場合は、あなたのコードは、あなたの条件は、このコンパイル単位に外部変数をという意味で、外部にある場合

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

に相当し、その値がそうであるように、それらは離れて最適化することができませんコンパイル時には不明です。

関連する問題