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)
这取决于编译器是否可以foo()在同一编译单元中看到.
启用优化后,如果foo()与调用者位于同一个编译单元中,它可能会内联调用foo(),然后将优化简化为与if (true)之前相同的检查.
如果转移foo()到单独的编译单元,则内联不再发生,因此大多数编译器将无法再优化此代码.(链接时优化可以在编译单元之间进行优化,但它不常见 - 并非所有编译器都支持它,并且通常它的效率较低.)