C ++ Şablonlar - Komple Kılavuzu, 2nd Edition tanıtır max şablonu:
template<typename T>
T max (T a, T b)
{
// if b < a then yield a else yield b
return b < a ? a : b;
}
Ve bunun “b < a ? a : b”
yerine kullanmayı açıklar “a < b ? b : a”
:
[StepanovNotes] 'a göre max () şablonunun bilerek “b <a? a: b yerine “a <b? b: a ”işlevini, iki değer eşdeğer olsa da eşit olmasa bile düzgün çalıştığından emin olmak için.
" even if the two values are equivalent but not equal.
" Nasıl anlaşılır ? “a < b ? b : a”
benim için aynı sonuca sahip gibi görünüyor.
a
ve b
birlikte std::addressof
et. ark.
a = max(a, b);
(tekrar tekrar) a
gereksiz yere değiştirmek istemeyebilirsiniz .
a
bir kopyasıyla geçersiz kılacaksınız a
).
std::addressof
ilgisiz. Aslında, verilen T max(T a, T b)
için zaten biliyoruz addressof(a) != addressof(b)
.
a
veb
olan eşdeğer , o zaman!(a < b) && !(b < a)
doğrudur, bu yüzdena < b
veb < a
her ikisi de yanlış, bu yüzden deb < a ? a : b
,b
sen istiyorsun ... istediğini olmadığı, döndürülüra < b ? b : a
.