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.
ave bbirlikte std::addressofet. ark.
a = max(a, b);(tekrar tekrar) agereksiz yere değiştirmek istemeyebilirsiniz .
abir kopyasıyla geçersiz kılacaksınız a).
std::addressofilgisiz. Aslında, verilen T max(T a, T b)için zaten biliyoruz addressof(a) != addressof(b).
avebolan eşdeğer , o zaman!(a < b) && !(b < a)doğrudur, bu yüzdena < bveb < aher ikisi de yanlış, bu yüzden deb < a ? a : b,bsen istiyorsun ... istediğini olmadığı, döndürülüra < b ? b : a.