因此,在高重复循环中,有一个规则是尝试将 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] ) ;
}
函数指针是否存在某种隐藏的开销?它是否像直接调用函数一样高效?