سؤال

وأيهما أفضل:

bool MyClass::someQuery() const;

const bool MyClass::someQuery() const;

ولقد تم استخدام "منطقي CONST" منذ أنا متأكد أتذكر أنني سمعت انها "ما تفعل [إينتس]" (لمشغلي مثل المقارنة)، ولكن لا أستطيع العثور على دليل على ذلك في أي مكان، ويرجع ذلك أساسا إلى كونها صعبة إلى Google والتحسس لا تساعد بأي؛؟) هل يستطيع أحد أن يؤكد أن

للي عودة القيم CONST (وهذا ليس فقط حول bools) أكثر منطقية. انها سوف تمنع المؤقتة المتقبلة يتم تعديل، الذي هو دائما تقريبا سيكون من الخطأ مبرمج. أريد فقط شيئا لدعم ما يصل حتى أستطيع أن أحكم بإرجاع قيم CONST لزملائي:)

هل كانت مفيدة؟

المحلول

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

وD'لديك نسخة من سكوت مايرز "اعتبارا من C ++" حول؟ نشير لهم في البند 3 (صفحة 18 في الطبعة الثالثة)؛)

ويعطي مثال

class Rational {...};
const Rational operator* (const Rational& lhs, const Rational& rhs );

if( (a * b) = c ) // declaring operator *'s return value const causes error to be caught by compiler

نصائح أخرى

وهذا هو الحال عندما يضيف const لا قيمة لكن يتضخم رمز ويجعل القارئ يفكر أكثر. ما هي الفائدة من هذا const؟ المتصل يمكن نسخ قيمة في بعض المتغيرات غير CONST ويفعل ما يحلو له مع ذلك على أي حال.

وتجدر الإشارة إلى أن if((a*b) = c) لا ترجمة لالمدمج في أنواع على أي حال، لذلك هو مهم جدا هنا سواء نحن نتحدث المدمج في أنواع (يسأل سؤالك عن bool) أو أنواع المعرفة من قبل المستخدم.

لالمدمج في أنواع أنه لا معنى على الإطلاق، لذلك لا ينبغي أن تستخدم. ولأنواع المعرفة، وأنا في مخيم jalf: ما إذا كان المتصل <م> يريد لتعديل الكائن عاد؟

وأنا لست مقتنعا بأن if((a*b) = c) مثل هذا حجة جيدة للعودة أنواع المعرفة من قبل المستخدم CONST، لأنني لا أستطيع أن أتذكر آخر مرة رأيت مترجم <م> لا تحذير حول هذا الموضوع.

لتكون أكثر قليلا محددة، فقط "كائنات" يمكن أن يكون CONST. تعريف C ++ القياسية من "وجوه" يشمل كل شيء يشير إلى lvalue إلى ( "له اسم") والطبقة من نوع المؤقتة المتقبلة. قيمة العائد منطقية هو rvalue من نوع غير فئة وهذا هو السبب مترجم المعايير المتوافقة فقط سوف تتجاهل "CONST" في هذه القضية. كما قال آخرون بالفعل، انها غير مجدية في هذا السياق.

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

ويستخدم معدل const فقط لأنواع الإرجاع التي يتم إرجاعها <م> بالرجوع (إما const SomeObject& إشارة أو عن طريق const SomeObject* المؤشر)، وبالتالي فإن الطالب لا تكون قادرا على تعديل الكائن عبر إشارة / المؤشر. يتم إرجاع أنواع بدائية <م> حيث القيمة ، وهو ما يعني أن يتلقى المتصل و<م> نسخة من وجوه، وليس هدف في حد ذاته.

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

ووتماما لا يهم. ولذلك، كان هناك إجماع على أن يعود فقط bool.

والسبب أنه لا يهم هو أنه لا يمكن استدعاء وظائف عضو غير CONST على أي حال. bool ليس فئة أو بنية.

وكما منطقي سوف يتم نسخها، هو نفسه، لوضع CONST أم لا. بالإضافة إلى أنك سوف قد يكون لها بعض المشاكل COMPIL.

نوع الإرجاع CONST

<اقتباس فقرة>   

وملخص:

     

وقيمة من نوع إرجاع غير   لا يمكن تغيير CONST المعلنة. هذه   غير مفيدة خصوصا عندما يعطي   الرجوع إلى الداخلية فئة، ولكن   ويمكن أيضا منع الأخطاء نادرة.

const bool func();
bool f = func();

و0 أخطاء، 0 التحذيرات. ماذا لديكم إنجاز بخلاف التضخم كود لزوم لها؟

وهذه هي وظيفة القديمة، ولكن أعتقد أنه من الجدير بالذكر أن هناك حالة الزاوية المحتملة هنا منذ C ++ 11. في حين، كما ذكر من قبل الآخرين، وستجعل لا فرق ما إذا كنت تستخدم const bool أو bool كنوع العودة في معظم الحالات، إذا كنت تستخدم C ++ 11 decltype ومساعديه، على سبيل المثال، result_of ، يمكن أن تقوم بتعريف متغير مع نفس النوع كقيمة عودته من بعض من وظيفة، وذلك const سيكون له في الواقع تأثير في هذه القضية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top