সি ++ এ, আমরা এই কোডটি লিখতে পারি:
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
খারাপ নাম দেওয়া হয়।