لا يمكن ربط مرجع 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