4

次のコードがコンパイラによって最適化およびインライン化された場合、三項演算を評価するために必要な分岐が削除されると想定しても安全ですか? または、ほとんどの主流のコンパイラでは、分岐を避けるために、以下のメソッドを 2 つの別々のメソッドに分割する方が賢明でしょうか?

/*! \brief this method returns the cos of an angle. User can specify if it is
 * in degrees or radians.
 */
template <typename T, angle_mode AM>
T cos(const T &angle)
{ 
  return (AM == radians) ? 
    std::cos(angle) :
    std::cos(degrees_to_radians(angle));
}
4

1 に答える 1

4

はい、常に最適化する必要があります。

std::cosそうでなかったとしても、 のコストが条件付きのコストを大きく凌駕するような気がします。

何らかの理由で最適化されていない場合は、テンプレートの特殊化を使用して、コンパイル時に分岐を強制します。

于 2013-06-15T06:29:00.643 に答える