在 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/