"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا لا يمكنني ربط مرجع Lvalue غير ثابت بقيمة R في C++؟

لماذا لا يمكنني ربط مرجع Lvalue غير ثابت بقيمة R في C++؟

تم النشر بتاريخ 2024-12-22
تصفح:631

 Why Can\'t I Bind a Non-Const Lvalue Reference to an Rvalue in C  ?

لا يمكن ربط مرجع Lvalue غير ثابت بالقيمة R: القرار

واجه مقتطف التعليمات البرمجية المحدد خطأ أثناء تهيئة كائن من الفئة Foo داخل منشئ فئة Bar. تشير رسالة الخطأ إلى أن مرجع قيمة غير ثابتة (Foo f) مرتبط بقيمة r (نتيجة استدعاء genValue()).

في لغة C، يمكن للمعلمات المرجعية غير الثابتة أن تشير فقط إلى المعلمات المسماة المتغيرات (القيم). ومع ذلك، فإن نتيجة genValue() هي قيمة مؤقتة (rvalue). لحل هذه المشكلة، نحتاج إلى تمرير قيمة genValue() بالقيمة (int).

class Foo {
public:
    Foo(int x) {
        this->x = x;
    }
private:
    int x;
};

class Bar {
public:
    Bar(): f(genValue()) {
    }
private:
    Foo f;

    int genValue() {
        int x;
        // do something ...
        x = 1;
        return x;
    }
};

من خلال تغيير وسيطة المنشئ إلى int، يمكننا الآن تهيئة كائن Foo ضمن نطاق المنشئ دون أي أخطاء.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3