现代编译器可以优化表达式从函数派生的常量表达式吗?

Qua*_*tes 4 c++ compiler-construction performance compiler-optimization

我的理解是,现代c ++编译器采用以下方式的快捷方式:

if(true)
{do stuff}
Run Code Online (Sandbox Code Playgroud)

但是如下:

bool foo(){return true}
...
if(foo())
{do stuff}

Or:

class Functor
{

 public:
        bool operator() () { return true;}

}

...

Functor f;

if(f()){do stuff}
Run Code Online (Sandbox Code Playgroud)

Sti*_*sis 5

这取决于编译器是否可以foo()在同一编译单元中看到.

启用优化后,如果foo()与调用者位于同一个编译单元中,它可能会内联调用foo(),然后将优化简化为与if (true)之前相同的检查.

如果转移foo()到单独的编译单元,则内联不再发生,因此大多数编译器将无法再优化此代码.(链接时优化可以在编译单元之间进行优化,但它不常见 - 并非所有编译器都支持它,并且通常它的效率较低.)