هل تريد تمرير القيمة إلى المعلمة المرجعية const؟

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

  •  21-12-2019
  •  | 
  •  

سؤال

لم أتمكن من العثور على سؤال مماثل هنا، أو من خلال Google، ربما لأنني لا أعرف إذا كنت أطرح السؤال الصحيح، لذلك لست متأكدًا مما إذا كان العنوان صحيحًا.لكنني أعمل مع الكود الذي يبدو كالتالي:

Foo * foo = new Foo();
add(*foo); //Couldnt find any similar questions on this syntax?

void add(const Foo & foo){

//What exactly is foo here? How can i manipulate its members, foo. or foo-> ?

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

المحلول

المتغير foo داخل add الطريقة هي مرجع ثابت.يتصرف كمؤشر بمعنى أنه لا ينسخ الكائن:تتفاعل معه كما لو كان الكائن نفسه.على عكس المؤشر، لا يمكن أن يكون المرجع NULL, ، ولا يمكن إعادة تعيينه.تتفاعل معها باستخدام نقطة . المشغل بدلاً من -> المشغل أو العامل.

void add(const Foo & foo){
    cout << foo.first_member << endl;
    foo.const_member_function();
}

منذ foo هو مرجع ثابت، يمكنك أن تقرأ fooأعضاء، ولكن لا يمكنك تعيينهم.أيضًا، أي مكالمات للأعضاء تعمل على foo يقتصر المرجع على الوظائف المحددة بشكل واضح const.

الاتصال add مع المرجعية foo على ما يرام، طالما foo ليس NULL.إجراء مرجع عن طريق إلغاء الإشارة أ NULL المؤشر هو سلوك غير محدد.

نصائح أخرى

'foo' is a constant reference. You can access its members via foo.fred, foo.method(), etc., but you can't change any data members or call any non-const methods.

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