Avatar ·

ما هي 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). سأكون ممتنًا لشرح مفصل!