Szablony C ++ - kompletny przewodnik, wydanie 2, wprowadza szablon max :
template<typename T>
T max (T a, T b)
{
// if b < a then yield a else yield b
return b < a ? a : b;
}
I wyjaśnia użycie “b < a ? a : b”zamiast “a < b ? b : a”:
Zauważ, że szablon max () zgodny z [StepanovNotes] celowo zwraca „b <a? a: b ”zamiast„ a <b? b: a ”, aby upewnić się, że funkcja zachowuje się poprawnie, nawet jeśli dwie wartości są równoważne, ale nie równe.
Jak rozumieć „ even if the two values are equivalent but not equal.”? “a < b ? b : a”wydaje się mieć ten sam wynik dla mnie.
aa bz std::addressofet. glin.
a = max(a, b);(wielokrotnie), możesz nie chcieć aniepotrzebnie wymieniać .
akopią a).
std::addressofto nie ma znaczenia. Właściwie T max(T a, T b)to już wiemy addressof(a) != addressof(b).
aibsą równoważne , to!(a < b) && !(b < a)jest prawda, taka < bib < aoba fałszywe, więc wb < a ? a : b,bjest zwracana, co nie jest to, co chcesz ... Ty chcesza < b ? b : a.