Шаблони 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”
:
Зауважте, що шаблон max () відповідно до [StepanovNotes] навмисно повертає “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
.