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.
a
a b
z std::addressof
et. glin.
a = max(a, b);
(wielokrotnie), możesz nie chcieć a
niepotrzebnie wymieniać .
a
kopią a
).
std::addressof
to nie ma znaczenia. Właściwie T max(T a, T b)
to już wiemy addressof(a) != addressof(b)
.
a
ib
są równoważne , to!(a < b) && !(b < a)
jest prawda, taka < b
ib < a
oba fałszywe, więc wb < a ? a : b
,b
jest zwracana, co nie jest to, co chcesz ... Ty chcesza < b ? b : a
.