C ++模板-《完整指南,第二版》介绍了max模板:
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”
似乎对我有相同的结果。
a
和b
与等价的std::addressof
。等
a = max(a, b);
(反复),则可能不想a
不必要地进行更换。
a
使用的副本覆盖a
)。
std::addressof
无关紧要。实际上,对于给定的T max(T a, T b)
我们已经知道addressof(a) != addressof(b)
。
a
和b
是相等的,则!(a < b) && !(b < a)
是真实的,所以a < b
和b < a
都是假的,所以b < a ? a : b
,b
被返回,这是不是你想要的。你想a < b ? b : a
。