4

假设以下代码在被编译器优化和内联时会删除评估三元运算所需的分支是否安全?或者对于大多数主流编译器,将下面的方法分成两个单独的方法以避免分支会更明智吗?

/*! \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 回答