Que sont rvalue, lvalue, xvalue, glvalue et prvalue en C++11 ?
J'apprends le C++11 et je suis tombé sur de nouveaux termes : rvalue, lvalue, xvalue, glvalue et prvalue. Avant, dans l'ancien C++, je pensais que tout était simple : une lvalue est ce qui se trouve à gauche d'une affectation (par exemple, une variable), et une rvalue est ce qui se trouve à droite (par exemple, le nombre 42). Mais avec l'apparition de la sémantique de déplacement et de std::move, tout est devenu confus.\n\nPar exemple, j'ai écrit ce code :\n\n```cpp\nint x = 10; // x — lvalue, 10 — prvalue\nint&& rref = std::move(x); // Que sont std::move(x) et rref ?\nint y = x + 5; // (x + 5) — qu'est-ce que c'est ?\n```\n\nJ'ai entendu dire qu'il y a cinq catégories, mais je ne comprends pas comment les distinguer en pratique. Dans la documentation, on parle d'"identité" et de "déplaçabilité", mais j'ai besoin d'exemples simples. Pourquoi std::move(x) retourne-t-il une rvalue, alors que x est une lvalue ? Et qu'est-ce qu'une xvalue ? Expliquez-moi, s'il vous plaît.