هل تريد تمرير القيمة إلى المعلمة المرجعية const؟
سؤال
لم أتمكن من العثور على سؤال مماثل هنا، أو من خلال 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.