لماذا تستخدم المعلمة const int عند التحميل الزائد على عامل التشغيل المنخفض؟
-
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)