c++ - 为什么在 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
改用了基于 - 的代码。
我想这有一些技术原因。那么注释掉的版本而不是活动的版本会出现什么问题呢?或者它们是否完全等效,并且活动版本只是使逐步调试更容易?
解决方案
gcc 中存在条件运算符实现错误,例如https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53000。可能这是为了避免那些。
推荐阅读
- windows - 如何将 regcap 用于 64 位 DLL 文件
- node.js - 如何从 Node.js 服务器(从端口 55000)向同一台计算机上运行的其他端口(可能是 8883)发送消息,例如“Hello I am Some Packet”?
- c++ - QGLViewer 最小示例失败。正确的依赖设置未知
- r - 如何对两个表进行特定的复杂绑定
- python - 静音命令失败并显示“AttributeError:'NoneType' 对象没有属性 'id'”
- java - 在 java/spring rest 中监控 rest API 调用
- r - clang-7:错误:链接器命令失败,macOS Big Sur 的退出代码为 1
- python - python切片中的“a[:,1]”是什么意思
- c# - 如何在收集到一定数量的硬币后才能进入下一个级别?
- r - 计算 R 中不同操作的日期之间的差异