Шаблоны 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”
:
Обратите внимание, что шаблон 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
.