c++ - 为什么在 std::max 的 libstdc++ 实现中避免使用三元条件?

标签 c++ conditional-operator

在 libstdc++ 中实现 <algorithm> header ,其部分在我的系统上位于 /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而是使用基于 - 的代码。

我认为这有一些技术原因。那么注释掉的版本会出现什么问题,而事件版本则不会出现问题呢?或者它们是否完全相同,并且事件版本只是使逐步调试变得更容易?

最佳答案

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

关于c++ - 为什么在 std::max 的 libstdc++ 实现中避免使用三元条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63901356/

相关文章:

c++ - 为什么必须在哪里放置 “template”和 “typename”关键字?

c++ - 在基于范围的 for 循环中使用转发引用有什么好处?

JavaScript 的内联 If/Else 与字符串连接返回意外值

php - 只有 true 语句的条件运算符

c++ - 安置新的在不同的大小类

c++ - 从 cin 推回成对的 vector 给出错误的结果

c++ - Qt - webkit - 如何以编程方式登录

javascript - 使用多个三元运算符替换字符串的多个字符

java - 使用条件运算符来选择哪个对象调用特定方法?

java - 三元if-else的自动拆箱需求