সি ++ এ, আমরা এই কোডটি লিখতে পারি:
struct Cat {
Cat(){}
};
const Cat cat;
std::move(cat); //this is valid in C++11
আমি যখন ফোন করি তখন এর std::moveঅর্থ আমি অবজেক্টটি সরিয়ে নিতে চাই, অর্থাৎ আমি বস্তুটি পরিবর্তন করব। কোনও constবস্তুর সরানো অযৌক্তিক, সুতরাং কেন std::moveএই আচরণটি সীমাবদ্ধ করে না? এটি ভবিষ্যতে একটি ফাঁদ হবে, তাই না?
ব্র্যান্ডন মন্তব্যে উল্লিখিত হিসাবে এখানে ফাঁদ বোঝানো হয়েছে:
"আমি মনে করি তার অর্থ এই" ফাঁদ "তাকে চুপচাপ লুকিয়ে আছে কারণ যদি সে বুঝতে না পারে, তবে তার একটি অনুলিপি শেষ হয়েছে যা তার উদ্দেশ্য নয়।"
স্কট মায়ার্সের "কার্যকর আধুনিক সি ++" বইয়ে তিনি একটি উদাহরণ দিয়েছেন:
class Annotation {
public:
explicit Annotation(const std::string text)
: value(std::move(text)) //here we want to call string(string&&),
//but because text is const,
//the return type of std::move(text) is const std::string&&
//so we actually called string(const string&)
//it is a bug which is very hard to find out
private:
std::string value;
};
যদি std::moveকোনও constজিনিসে অপারেট করতে নিষেধ করা হয় , আমরা সহজেই বাগটি খুঁজে পেতে পারি, তাই না?
CAT cat2 = std::move(cat);, ধরে CATনিচ্ছেন নিয়মিত পদক্ষেপ-অ্যাসাইনমেন্ট সমর্থন করে।
std::moveকেবলমাত্র castালাই, এটি আসলে কিছুই সরায় না
std::moveনিজে থেকে বস্তুর কিছুই করে না। এক তর্ক করতে পারেstd::moveখারাপ নাম দেওয়া হয়।