したがって、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] ) ;
(「Ho!自分で最適化しないでください!コンパイラが実行します!」と言っている場合)確かに、オプティマイザがこれを実行する可能性があります。しかし、Typical C ++ Bullshit (仮想関数に対する彼の態度など、彼のすべての点に同意しません)で、 MikeActonは次のように述べています。
では、代わりに関数ポインタを使用してみませんか?
FunctionPointer *fp ;
if( someModeSettingOn ) fp = func1 ;
else fp = func2 ;
for( int i = 0 ; i < 10000 ; i++ )
{
fp( data[i] ) ;
}
関数ポインタに何らかの隠れたオーバーヘッドがありますか?ストレート関数を呼び出すのは効率的ですか?