Was sind rvalue, lvalue, xvalue, glvalue und prvalue in C++11?
Ich lerne C++11 und bin auf neue Begriffe gestoßen: rvalue, lvalue, xvalue, glvalue und prvalue. Früher in altem C++ dachte ich, alles sei einfach: lvalue ist das, was links von der Zuweisung steht (z. B. eine Variable), und rvalue ist das, was rechts steht (z. B. die Zahl 42). Aber mit dem Aufkommen der Move-Semantik und std::move wurde alles verwirrend.\n\nZum Beispiel habe ich diesen Code geschrieben:\n\n```cpp\nint x = 10; // x — lvalue, 10 — prvalue\nint&& rref = std::move(x); // Was ist std::move(x)? Und rref?\nint y = x + 5; // (x + 5) — was ist das?\n```\n\nIch habe gehört, dass es fünf Kategorien gibt, verstehe aber nicht, wie man sie in der Praxis unterscheidet. In der Dokumentation steht etwas über "Identität" und "Verschiebbarkeit", aber ich brauche einfache Beispiele. Warum gibt std::move(x) ein rvalue zurück, obwohl x ein lvalue ist? Und was ist ein xvalue? Bitte erklären Sie.