Modèles C ++ - Le guide complet, 2e édition présente le modèle max :
template<typename T>
T max (T a, T b)
{
// if b < a then yield a else yield b
return b < a ? a : b;
}
Et cela explique l'utilisation “b < a ? a : b”
au lieu de “a < b ? b : a”
:
Notez que le modèle max () selon [StepanovNotes] renvoie intentionnellement «b <a? a: b »au lieu de« a <b? b: a ”pour s'assurer que la fonction se comporte correctement même si les deux valeurs sont équivalentes mais non égales.
Comment comprendre " even if the two values are equivalent but not equal.
"? “a < b ? b : a”
semble avoir le même résultat pour moi.
a
et b
avec std::addressof
et. Al.
a = max(a, b);
(à plusieurs reprises), vous ne voudrez peut-être pas remplacer a
inutilement.
a
avec une copie de a
).
std::addressof
n'est pas pertinent. En fait, pour le donné, T max(T a, T b)
nous savons déjà addressof(a) != addressof(b)
.
a
etb
sont équivalentes , alors!(a < b) && !(b < a)
est vrai, donca < b
etb < a
sont toutes les deux fausses, donc inb < a ? a : b
,b
est renvoyée, ce qui n'est pas ce que vous voulez ... Vous vouleza < b ? b : a
.