首页 > 解决方案 > 为什么在 std::max 的 libstdc++ 实现中避免使用三元条件?

问题描述

<algorithm>标头的 libstdc++ 实现中,我的系统上的一部分位于 中/usr/include/c++/8/bits/stl_algobase.h,我可以看到以下实现std::max

template<typename _Tp>
  _GLIBCXX14_CONSTEXPR
  inline const _Tp&
  max(const _Tp& __a, const _Tp& __b)
  {
    // concept requirements
    __glibcxx_function_requires(_LessThanComparableConcept<_Tp>)
    //return  __a < __b ? __b : __a;
    if (__a < __b)
      return __b;
    return __a;
  }

可以看到,带有三元条件运算符的单条语句?:被注释掉了,if改用了基于 - 的代码。

我想这有一些技术原因。那么注释掉的版本而不是活动的版本会出现什么问题呢?或者它们是否完全等效,并且活动版本只是使逐步调试更容易?

标签: c++conditional-operator

解决方案


gcc 中存在条件运算符实现错误,例如https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53000。可能这是为了避免那些。


推荐阅读