En C ++ 11, nous pouvons écrire ce code:
struct Cat {
   Cat(){}
};
const Cat cat;
std::move(cat); //this is valid in C++11
quand j'appelle std::move, cela signifie que je veux déplacer l'objet, c'est-à-dire que je vais changer l'objet. Déplacer un constobjet n'est pas raisonnable, alors pourquoi ne std::moverestreint-il pas ce comportement? Ce sera un piège dans le futur, non?
Ici, piège signifie comme Brandon l'a mentionné dans le commentaire:
"Je pense qu'il veut dire qu'il" le piège "sournoisement parce que s'il ne réalise pas, il finit avec une copie qui n'est pas ce qu'il voulait."
Dans le livre 'Effective Modern C ++' de Scott Meyers, il donne un exemple:
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;
};
S'il std::moveétait interdit d'opérer sur un constobjet, nous pourrions facilement trouver le bogue, non?
CAT cat2 = std::move(cat);, en supposant qu'il CATprend en charge l'assignation de déplacement régulière.
                std::moveest juste un casting, il ne bouge en fait rien
                
std::movepar lui-même ne fait rien à l'objet. On pourrait dire qu'ilstd::moveest mal nommé.