উভয় std::forward
এবং std::move
কাস্ট ব্যতীত কিছুই নয়।
X x;
std::move(x);
উপরের এক্সটি x
টাইপের এক্সের লভালিউ এক্সপ্রেশনটি টাইপ এক্সের একটি মূল্যবোধকে প্রকাশ করে (সঠিক হওয়ার জন্য একটি মূল্য)। move
একটি মূল্যও গ্রহণ করতে পারে:
std::move(make_X());
এবং এক্ষেত্রে এটি একটি পরিচয় ফাংশন: এক্স টাইপের এক্সের একটি মূল্যায়ন নেয় এবং প্রকার এক্সের একটি মূল্য দেয় returns
এর মাধ্যমে std::forward
আপনি কিছুটা গন্তব্য নির্বাচন করতে পারেন:
X x;
std::forward<Y>(x);
x
টাইপ এক্স এর লভ্যালু এক্সপ্রেশনটি ওয়াই টাইপের এক্সপ্রেশনকে কাস্ট করে Y
ওয়াই এক্স একজন প্রবেশযোগ্য বেস, বা এক্স ওয়াই একটি বেজ একটি রেফারেন্স হতে পারে এক্স, অথবা এক্স ওয়ান একটি রেফারেন্স সঙ্গে CV-কোয়ালিফায়ার দূরে নিক্ষেপ করতে পারবে না হতে পারে forward
, কিন্তু এক CV-কোয়ালিফায়ার যোগ করতে পারেন। অ্যাক্সেসযোগ্য বেস রূপান্তরকরণ ব্যতীত Y এমন ধরণের হতে পারে না যা এক্স থেকে কেবল রূপান্তরযোগ্য।
যদি Y একটি লভ্যালু রেফারেন্স হয় তবে ফলাফলটি একটি লভ্যালু এক্সপ্রেশন হবে। যদি Y কোনও লভ্যালু রেফারেন্স না হয় তবে ফলাফলটি একটি মূল্য (সুনির্দিষ্ট হওয়ার জন্য xvalue) এক্সপ্রেশন হবে।
forward
Y যদি লভ্যালু রেফারেন্স না হয় তবেই একটি মূল্যের যুক্তি নিতে পারে। এটি হল, আপনি লভ্যালুতে কোনও মূল্যায়ন নিক্ষেপ করতে পারবেন না। এটি সুরক্ষার কারণেই এটি কারণ সাধারণত এটি ঝুঁকির উল্লেখগুলিতে বাড়ে। তবে মূল্যের সাথে কোনও মূল্যকে castালাই ঠিক আছে এবং অনুমোদিত।
আপনি যদি ওয়াইকে এমন কিছু নির্দিষ্ট করার চেষ্টা করেন যা অনুমোদিত নয়, ত্রুটিটি সংকলন সময়ে ধরা হবে, রান সময় নয়।