C ++ Templates - Panduan Lengkap, Edisi ke-2 memperkenalkan max template:
template<typename T>
T max (T a, T b)
{
// if b < a then yield a else yield b
return b < a ? a : b;
}
Dan itu menjelaskan penggunaan “b < a ? a : b”bukannya “a < b ? b : a”:
Perhatikan bahwa maks () templat menurut [StepanovNotes] dengan sengaja mengembalikan “b <a? a: b "bukannya" a <b? b: a ”untuk memastikan bahwa fungsi berperilaku dengan benar meskipun kedua nilai tersebut setara tetapi tidak sama.
Bagaimana cara memahami " even if the two values are equivalent but not equal."? “a < b ? b : a”sepertinya punya hasil yang sama buat saya.
adan bdengan std::addressofet. Al.
a = max(a, b);(berulang kali), Anda mungkin tidak ingin mengganti yang atidak perlu.
adengan salinan a).
std::addressoftidak relevan. Padahal, untuk yang diberikan T max(T a, T b)kita sudah tahu addressof(a) != addressof(b).
adanbyang setara , maka!(a < b) && !(b < a)benar, sehinggaa < bdanb < akeduanya palsu, sehingga dalamb < a ? a : b,bdikembalikan, yang tidak apa yang Anda inginkan ... Anda ingina < b ? b : a.