C ++ 11'de şu kodu yazabiliriz:
struct Cat {
Cat(){}
};
const Cat cat;
std::move(cat); //this is valid in C++11
aradığımda std::move
, nesneyi hareket ettirmek istediğim anlamına gelir, yani nesneyi değiştireceğim. Bir const
nesneyi taşımak mantıksızdır, öyleyse neden std::move
bu davranışı kısıtlamıyorsunuz? Gelecekte bir tuzak olacak, değil mi?
Burada, Brandon'ın yorumda bahsettiği tuzak şu anlama gelir:
"Sanırım bu onu sinsice" tuzağa düşürüyor "çünkü farkına varmazsa, amaçladığı gibi olmayan bir kopya ile sonuçlanıyor."
Scott Meyers'in 'Effective Modern C ++' kitabında bir örnek veriyor:
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;
};
Eğer std::move
bir faaliyet yasak edildi const
nesne, kolayca doğru, hata öğrenebilir?
CAT cat2 = std::move(cat);
, CAT
normal hareket atamasını desteklediğini varsayarsak .
std::move
sadece bir kadro, aslında hiçbir şeyi hareket
std::move
kendi başına nesneye hiçbir şey yapmaz. Adınınstd::move
kötü olduğu iddia edilebilir .