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í.
a
y b
con std::addressof
et. Alabama.
a = max(a, b);
(repetidamente), es posible que no desee reemplazarlo a
innecesariamente.
a
con una copia de a
).
std::addressof
es irrelevante. De hecho, para lo dado T max(T a, T b)
ya lo sabemos addressof(a) != addressof(b)
.
a
yb
son equivalentes , entonces!(a < b) && !(b < a)
es cierto, por lo quea < b
yb < a
son falsas, por lo que enb < a ? a : b
,b
se devuelve, que no es lo que quieres ... ¿Quieresa < b ? b : a
.