因此,有这条规则可以尝试将if
语句从高重复循环中拉出来:
for( int i = 0 ; i < 10000 ; i++ )
{
if( someModeSettingOn ) doThis( data[i] ) ;
else doThat( data[i] ) ;
}
他们说,最好将其分解,将 if 语句放在外面:
if( someModeSettingOn )
for( int i = 0 ; i < 10000 ; i++ )
doThis( data[i] ) ;
else
for( int i = 0 ; i < 10000 ; i++ )
doThat( data[i] ) ;
(如果您说“哦!不要自己优化!编译器会这样做!”)当然优化器可能会为您执行此操作。但是在典型的 C++ 废话中(我不同意他的所有观点,例如他对虚函数的态度)Mike Acton 说:“为什么要让编译器猜测你知道的东西?对我来说,这几乎是这些粘性的最佳点。
那么为什么不使用函数指针呢?
FunctionPointer *fp ;
if( someModeSettingOn ) fp = func1 ;
else fp = func2 ;
for( int i = 0 ; i < 10000 ; i++ )
{
fp( data[i] ) ;
}
函数指针是否存在某种隐藏开销?调用直接函数是否有效?