Шаблоны 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.