ما هي rvalue و lvalue و xvalue و glvalue و prvalue في C++11؟
أنا أتعلم C++11 وقد صادفت مصطلحات جديدة: rvalue و lvalue و xvalue و glvalue و prvalue. في C++ القديم، كنت أعتقد أن الأمور بسيطة: lvalue هو ما يقف على يسار الإسناد (مثل المتغير)، و rvalue هو ما يقف على اليمين (مثل الرقم 42). لكن مع ظهور دلالات النقل (move semantics) و std::move، أصبح الأمر مربكًا.
على سبيل المثال، كتبت هذا الكود:
```cpp
int x = 10; // x — lvalue، 10 — prvalue
int&& rref = std::move(x); // ما هو std::move(x)؟ و rref؟
int y = x + 5; // (x + 5) — ما هذا؟
```
سمعت أن هناك خمس فئات، لكنني لا أفهم كيف أميزها عمليًا. في التوثيق يتحدثون عن "الهوية" و "القابلية للنقل"، لكنني أحتاج أمثلة بسيطة. لماذا يُرجع std::move(x) قيمة rvalue على الرغم من أن x هو lvalue؟ وما هو xvalue؟ اشرح لي، من فضلك، كمبتدئ، مع أمثلة كود.
أعتقد أن هذا مهم لفهم دلالات النقل (move semantics) والإرسال المثالي (perfect forwarding). سأكون ممتنًا لشرح مفصل!