私はコンパイラの専門知識がほとんどありません (読む必要はありません)。次のコード スニペットが比較的最近の (VS2008+/GCC 4.3+) コンパイラによって自動的に最適化されるかどうか疑問に思っていました。
Object objectPtr = getPtrSomehow();
if (objectPtr->getValue() == something1) // call 1
dosomething1;
else if (objectPtr->getValue() == something2) // call N (there are a few more)
dosomething2;
return;
ここで、getValue() は単に列挙型の 1 つであるメンバー変数を返します。(呼び出しには目に見える効果はありません)
私のコーディング スタイルは、"switch" の前に 1 つの呼び出しを行い、値を保存してそれを somethingX のそれぞれと比較することですが、これが今日のコンパイラでは議論の余地があるのではないかと思っていました。
また、これに対する答えを自分で見つけるために何をグーグルで検索すればよいかわかりませんでした。
ありがとうございました、
AK