C ++ टेम्प्लेट्स - पूरा गाइड, दूसरा संस्करण अधिकतम टेम्पलेट पेश करता है :
template<typename T>
T max (T a, T b)
{
// if b < a then yield a else yield b
return b < a ? a : b;
}
और यह “b < a ? a : b”इसके बजाय का उपयोग कर बताते हैं “a < b ? b : a”:
ध्यान दें कि [StepanovNotes] के अनुसार अधिकतम () टेम्प्लेट जानबूझकर "b <a" देता है? a: b ”के बजाय“ a <b? बी: “यह सुनिश्चित करने के लिए कि फ़ंक्शन दो मानों के बराबर होने पर भी सही ढंग से व्यवहार करता है लेकिन समान नहीं है।
" even if the two values are equivalent but not equal." कैसे समझें ? “a < b ? b : a”लगता है मेरे लिए एक ही परिणाम है।
aहैं और bसाथ std::addressofएट। अल।
a = max(a, b);(बार-बार) करते हैं तो आप aअनावश्यक रूप से बदलना नहीं चाहेंगे ।
aएक कॉपी के साथ ओवरराइड करने जा रहे हैं a)।
std::addressofअप्रासंगिक है। वास्तव में, दिए गए के लिए T max(T a, T b)हम पहले से ही जानते हैं addressof(a) != addressof(b)।
aऔरbकर रहे हैं बराबर है, तो!(a < b) && !(b < a)सही है, तोa < bऔरb < aदोनों झूठे हैं, इसलिए मेंb < a ? a : b,bजो नहीं है कि आप क्या चाहते ... आप चाहते दिया जाता है,a < b ? b : a।