J'ai fait un test simple pour mieux comprendre la sémantique du mouvement. Le résultat de sortie était inattendu pour moi. Bellow est ma fonction de test:Déplacer la sémantique pour lvalue
template<class T>
void test(T&& v)
{
v++;
}
void main()
{
int v = 1;
test(std::move(v));
std::cout << "Output:" << v << std::endl;
}
Je me attendais: Sortie: 1 Mais résultat réel était: Sortie: 2
Je pensais comme suit: - J'utilise std :: move (v), comme résultat, j'ai la conversion en "rvalue" et la fonction de test fonctionnera avec la variable temporelle. Par conséquent, le résultat devrait être Output: 1. Qu'est-ce qui ne va pas dans mes conclusions?
void principal n'est pas conforme à la norme C++. –
Le nom de 'std :: move' est mal choisi, et c'est probablement ce qui vous a rendu confus. Ça ne bouge pas vraiment. Il jette juste une valeur à une valeur, ce qui rend * possible * de faire un mouvement. –