Plantillas C ++: la guía completa, 2a edición, presenta la plantilla máxima :
template<typename T>
T max (T a, T b)
{
// if b < a then yield a else yield b
return b < a ? a : b;
}
Y explica el uso en “b < a ? a : b”lugar de “a < b ? b : a”:
Tenga en cuenta que la plantilla max () de acuerdo con [StepanovNotes] devuelve intencionalmente “b <a? a: b "en lugar de" a <b? b: a ”para garantizar que la función se comporte correctamente incluso si los dos valores son equivalentes pero no iguales.
¿Cómo entender " even if the two values are equivalent but not equal."? “a < b ? b : a”Parece tener el mismo resultado para mí.
ay bcon std::addressofet. Alabama.
a = max(a, b);(repetidamente), es posible que no desee reemplazarlo ainnecesariamente.
acon una copia de a).
std::addressofes irrelevante. De hecho, para lo dado T max(T a, T b)ya lo sabemos addressof(a) != addressof(b).
aybson equivalentes , entonces!(a < b) && !(b < a)es cierto, por lo quea < byb < ason falsas, por lo que enb < a ? a : b,bse devuelve, que no es lo que quieres ... ¿Quieresa < b ? b : a.