Этот ответ объясняет, почему данный код является неправильным со стандартной точки зрения C ++, но это вне контекста.
См. @ ответ TC для контекстного объяснения.
Стандарт определяет std::max(a, b)
следующим образом [alg.min.max] (выделено моё):
template<class T> constexpr const T& max(const T& a, const T& b);
Требуется : тип T является LessThanComparable (Таблица 18).
Возвращает :Чем больше значение.
Примечания : Возвращает первый аргумент, когда аргументы эквивалентны.
Эквивалент здесь означает, что !(a < b) && !(b < a)
равно true
[alg.sorting # 7] .
В частности, если a
и b
эквивалентны, оба значения a < b
и b < a
равны false
Таким образом, значение справа от :
будет возвращено в условном операторе, поэтому a
должно быть справа, поэтому:
a < b ? b : a
... кажется правильным ответом,Это версия, используемая libstdc ++ и libc ++ .
Таким образом, информация в вашей цитате кажется неверной в соответствии с текущим стандартом, но контекстом, в котором она определенаможет быть другим.