C ++模板:内联代码和编译器优化

时间:2013-06-15 06:24:32

标签: c++ templates compiler-optimization

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

/*! \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));
}

1 个答案:

答案 0 :(得分:4)

是的,应始终优化。

即使不是,我也觉得std::cos的成本会大大超过有条件的成本。

如果由于某种原因没有进行优化,请使用模板专门化在编译时强制分支。