C ++ - Vorlagen - In der vollständigen Anleitung, 2. Ausgabe , wird die maximale Vorlage vorgestellt:
template<typename T>
T max (T a, T b)
{
// if b < a then yield a else yield b
return b < a ? a : b;
}
Und es erklärt die Verwendung “b < a ? a : b”
anstelle von “a < b ? b : a”
:
Beachten Sie, dass die Vorlage max () gemäß [StepanovNotes] absichtlich „b <a? a: b “statt„ a <b? b: a ”, um sicherzustellen, dass sich die Funktion auch dann korrekt verhält, wenn die beiden Werte gleich, aber nicht gleich sind.
Wie verstehe ich " even if the two values are equivalent but not equal.
"? “a < b ? b : a”
scheint das gleiche Ergebnis für mich zu haben.
a
und b
mit std::addressof
et unterscheiden. al.
a = max(a, b);
(wiederholt) tun, möchten Sie möglicherweise nicht a
unnötig ersetzen .
a
mit einer Kopie von überschreiben a
).
std::addressof
aber irrelevant. Tatsächlich T max(T a, T b)
wissen wir das bereits addressof(a) != addressof(b)
.
a
undb
sind gleichwertig , so!(a < b) && !(b < a)
wahr ist , soa < b
undb < a
sind beide falsch, so inb < a ? a : b
,b
zurückgeführt wird, das ist nicht das, was Sie wollen ... Sie wollena < b ? b : a
.