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.
aund bmit std::addressofet unterscheiden. al.
a = max(a, b);(wiederholt) tun, möchten Sie möglicherweise nicht aunnötig ersetzen .
amit einer Kopie von überschreiben a).
std::addressofaber irrelevant. Tatsächlich T max(T a, T b)wissen wir das bereits addressof(a) != addressof(b).
aundbsind gleichwertig , so!(a < b) && !(b < a)wahr ist , soa < bundb < asind beide falsch, so inb < a ? a : b,bzurückgeführt wird, das ist nicht das, was Sie wollen ... Sie wollena < b ? b : a.