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。