ছাড়ানো রিটার্ন মান রূপান্তর অপারেটররা কিছুটা অদ্ভুত। তবে মূল ধারণাটি হ'ল এটি কোনটি ব্যবহৃত হয় তা চয়ন করার জন্য এটি একটি ফাংশন প্যারামিটারের মতো কাজ করে।
আর যখন মধ্যবর্তী সিদ্ধান্ত T&&
এবং জমিদার রেজল্যুশন নিয়ম ধিক্কার জানাই। এটি অনুমোদিত:T&
T&
template<class T>
void f( T&& ) { std::cout << "rvalue"; }
template<class T>
void f( T& ) { std::cout << "lvalue"; }
কাজ করতে. T&&
একটি লভালুর বিপরীতে মিলতে পারে, তবে যখন লভালু এবং সর্বজনীন রেফারেন্স ওভারলোড উভয় উপলব্ধ থাকে তবে লভালুটি পছন্দ হয়।
রূপান্তর অপারেটরগুলির সঠিক সেট সম্ভবত:
template <typename T>
operator T&&() &&;
template <typename T>
operator T &() const; // maybe &
অথবা এমনকি
template <typename T>
operator T() &&;
template <typename T>
operator T &() const; // maybe &
আপনাকে দংশন থেকে ব্যর্থ আজীবন প্রসার রোধ করতে।
অর্ডার নির্ধারণের জন্য ব্যবহৃত প্রকারগুলি আংশিক অর্ডারিংয়ের প্রেক্ষাপটে নির্ভর করে:
[স্নিপ]
(৩.২) কোনও রূপান্তর ফাংশনে কল করার প্রসঙ্গে, রূপান্তর ফাংশন টেম্পলেটগুলির ফেরতের প্রকারগুলি ব্যবহৃত হয়।
যার পরে ওভারলোডগুলি বাছাই করার সময় "আরও বিশেষায়িত" নিয়মের উপর নির্ভর করে শেষ হয়:
(৯.১) যদি আর্গুমেন্ট টেমপ্লেট থেকে প্রকারটি একটি লভ্যালু রেফারেন্স এবং প্যারামিটার টেম্পলেট থেকে প্রকারটি না হয় তবে প্যারামিটারের ধরনটি কমপক্ষে যুক্তির ধরণের হিসাবে বিশেষ হিসাবে বিবেচিত হয় না; অন্যথায়,
এইভাবে operator T&&
কমপক্ষে হিসাবে বিশেষায়িত নয় operator T&
, এর মধ্যে কোনও নিয়ম রাষ্ট্র operator T&
কমপক্ষে হিসাবে বিশেষায়িত নয় operator T&&
, তাই এর operator T&
চেয়ে বেশি বিশেষায়িত operator T&&
।
আরও বিশেষায়িত টেম্পলেটগুলি কম ওভারলোড রেজোলিউশন জিতেছে, সমস্ত কিছু সমান।