لماذا تستخدم المعلمة const int عند التحميل الزائد على عامل التشغيل المنخفض؟

StackOverflow https://stackoverflow.com//questions/21042437

  •  21-12-2019
  •  | 
  •  

سؤال

أنا جديد على لغة C++، لذا هل يمكنك توضيح لماذا/متى يجب أن أستخدم هذا؟

int & MyArray::operator[] (const int i)
{
    return arr[i];
}

بدلا من هذا

int & MyArray::operator[] (int i)
{
    return arr[i];
}
هل كانت مفيدة؟

المحلول

لا يصدر قدرا كبيرا من الفرق!

يحب بعض الأشخاص علاج المعلمات غير قابلة للتغيير، لذلك فهم يشرفونهم كصديق.في هذه الحالة إنه شيء أسلطي.

نصائح أخرى

في وظيفة تصريح, ، فإنه لا فرق على الإطلاق، لأنه من المستوى الأعلى constيتم تجاهلها.

وهذان هما في الواقع نفس الإعلان، ولهذا السبب، المستوى الأعلى const في معلمات الوظيفة يجب تجنبها:

void foo(int);
void foo(const int); // re-declaration of above function

في وظيفة تعريف, فهذا يعني أنه لا يمكنك تغيير نسخة الوسيطة في وظيفتك:

void foo(int i) { i++; } // OK
void foo(const int i) { i++; } // Error

لذا، يمكن استخدامه كأداة تنفيذ للتعبير عن أن المتغير المحلي موجود const.وهذا يمنح المترجم مجالًا أكبر لإجراء التحسينات.

لا تفعل هذا.إنه متطابق من وجهة نظر المتصل، ويضيف فقط الضوضاء البصرية.

يتم تمرير المعلمة givealeticetagcode حسب القيمة وهو نوع بيانات عادي، يتم نسخه، لذلك عند وضع علامة عليه كصديم، فإنك تخبر التحويل البرمجي أنه لا يمكن تغييره داخل الطريقة، ولكن لأنه نسخة غير ذلكT مهمة على الإطلاق، وفي هذا المثال المحدد، تستخدمه فقط كأداة.

كلا النموذجين صحيحة.استخدم أول واحد إذا كنت ترغب في التأكد من أن المعلمة "i" لن يتم تعديلها في الوظيفة، والتي قد تكون مفيدة إذا كانت الوظيفة أطول / أكثر تعقيدا. ومع ذلك، في إعلان المشغل لا تستخدم Const:

giveacodicetagpre.

من القانوني أن يكون لها إعلان بدون CONST، والتعريف معها.

كقاعدة عامة، أي شيء لا تنوي تعديله يجب أن يكون كذلك const

If you not trying to edit your parameter then its better to use const.

As far as performance is concerned not much difference. But it safeguards your parameter from editing (accidentally) inside function.

int & MyArray::operator[] (const int i)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top