C++ 模板 - 完整指南,第 2 版 介绍了 最大 模板:
template<typename T>
T max (T a, T b)
{
// if b < a then yield a else yield b
return b < a ? a : b;
}
它解释了使用 “b < a ? a : b”
而不是 “a < b ? b : a”
:
请注意,根据 [StepanovNotes] 的 max() 模板有意返回“b < a ? a : b” 而不是 “a < b ? b : a” 以确保即使两个值相等但不相等,函数也能正确运行。
如何理解“ even if the two values are equivalent but not equal.
”? “a < b ? b : a”
对我来说似乎有相同的结果。
原文由 Nan Xiao 发布,翻译遵循 CC BY-SA 4.0 许可协议
std::max(a, b)
确实指定返回a
当两者相等时。Stepanov 和其他人认为这是一个错误,因为它破坏了给出
a
和b
的有用属性,您始终可以使用{min(a, b), max(a, b)}
对它们进行排序为此,当参数相等时,您希望max(a, b)
返回b
。