البرمجة

تحميل عامل السالب في C++

في C++، يمكنك تحميل (أو تعريف) عامل السالب الأحادي (unary minus operator) للمرجعات الرائدة (rvalue references). لتحميل عامل السالب الأحادي، يمكنك استخدام دالة عضوية خاصة بالفئة (member function) أو دالة غير عضوية (non-member function). لكن يجب أن تتذكر أن التحميل ليس يمكن أن يعمل فقط على أساس نوع المرجع، ولكن أيضًا على أساس القيمة (value category) للمرجع.

لتحميل عامل السالب الأحادي للمرجعات الرائدة، يجب عليك تحميل الدالة باستخدام نوع القيمة المرجع إليه (reference collapsing)، وذلك باستخدام التحميل للأمام (forwarding reference) باستخدام std::forward، كما هو موضح في المثال التالي:

cpp
#include struct Foo { int value; Foo(int value) : value(value) {} // Member function for lvalue reference Foo operator-() const& { return Foo(-value); } // Non-member function for rvalue reference friend Foo operator-(Foo&& foo) { return Foo(-foo.value); } }; int main() { Foo a(10); Foo b = -a; // Calls Foo::operator-() const& Foo c = -(a + b); // Calls the friend function operator-(Foo&&) std::cout << "b.value: " << b.value << std::endl; // Output: -10 std::cout << "c.value: " << c.value << std::endl; // Output: 20 return 0; }

يمكنك ملاحظة أننا نستخدم const& لتحميل الدالة للمراجع الرائدة، ونستخدم && لتحميل الدالة للمراجع الرائدة.

المزيد من المعلومات

بالطبع! في الكود السابق، قمنا بتعريف هيكل Foo الذي يحتوي على عضو value من النوع int. ثم قمنا بتحميل عامل السالب الأحادي لهذا الهيكل.

  • للحالة حيث نريد استخدام العامل السالب على متغير من نوع Foo (أي قيمة)، قمنا بتعريف دالة عضوية operator-() مستخدمة للمراجع الرائدة (lvalue reference). هذه الدالة تسترد نسخة جديدة من Foo بقيمة value سالبة.

  • للحالة حيث نريد استخدام العامل السالب على قيمة مؤقتة (rvalue)، قمنا بتعريف دالة غير عضوية operator-() تستقبل Foo&& وتسترد نسخة جديدة من Foo بقيمة value سالبة.

في الدالة الغير عضوية، نستخدم friend لنجعل الدالة تستطيع الوصول إلى الأعضاء الخاصة (private members) لهيكل Foo.

باستخدام هذا النوع من التحميل، يمكنك الآن استخدام العامل السالب الأحادي على المراجع الرائدة والقيم المؤقتة من نوع Foo بنجاح.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر