C ++ 11 में, हम इस कोड को लिख सकते हैं:
struct Cat {
Cat(){}
};
const Cat cat;
std::move(cat); //this is valid in C++11
जब मैं कॉल करता हूं std::move, तो इसका मतलब है कि मैं ऑब्जेक्ट को स्थानांतरित करना चाहता हूं, अर्थात मैं ऑब्जेक्ट को बदल दूंगा। किसी constवस्तु को स्थानांतरित करना अनुचित है, इसलिए std::moveइस व्यवहार को प्रतिबंधित क्यों नहीं किया जाता है? यह भविष्य में एक जाल होगा, है ना?
यहाँ ट्रैप का मतलब ब्रैंडन की टिप्पणी में बताया गया है:
"मुझे लगता है कि इसका मतलब है कि वह उसे फँसाता है" डरपोक है क्योंकि अगर उसे एहसास नहीं होता है, तो वह एक कॉपी के साथ समाप्त होता है जो कि उसका इरादा नहीं है। "
स्कॉट मेयर्स की पुस्तक 'इफेक्टिव मॉडर्न C ++' में वह एक उदाहरण देते हैं:
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सिर्फ एक कलाकार है, यह वास्तव में कुछ भी नहीं ले जाता है
std::moveअपने आप से वस्तु के लिए कुछ नहीं करता है। कोई बहस कर सकता हैstd::moveकि उसका नाम खराब है।