সি ++ টেম্পলেটগুলি - সম্পূর্ণ গাইড, ২ য় সংস্করণ সর্বাধিক টেমপ্লেটটি উপস্থাপন করেছে :
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”
:
মনে রাখবেন যে [স্টেপেনভ নোটস] অনুসারে সর্বাধিক () টেমপ্লেট ইচ্ছাকৃতভাবে "বি <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
।