مهم در پاسخ به این سوال نحوهی استفاده از مقدار بازگشتی در برنامه است.
چند حالت رو در نظر میگیریم:
از مقدار بازگشتی برای فراخوانی توابع عضو غیر const
استفاده میکنین: در این صورت نمیتونین ارجاع یا اشارهگر ثابت برگردونین. یعنی کد زیر اشتباهه
class C
{
private:
int x;
public:
C(int i = 0) : x(i) {}
~C(){}
void reset() { this->x = 0; }
const C& oprator++(unsigned int i)
{
this->x++;
return *this;
}
};
int main()
{
C obj;
(obj++).reset();
}
reset
تابع غیرثابت عضو هست و بنابراین اگه اشارهگر ثابت باشه نمیتونه بهش دسترسی داشته باشه.
از مقدار بازگشتی فقط برای فراخوانی توابع عضو const
استفاده میکنین: در این صورت استفاده از const &
یا const *
ترجیح داده میشه تا با نگاه کردن به امضای تابع متوجه بشین که فراخوانی به توابع غیرثابت انجام نشده. و اگه این دسترسی رو ناخواسته انجام دادین اخطار کامپایل به شما این مساله رو تذکر بده.
اما چرا از ارجاع به جای اشارهگر استفاده کنیم؟! برای مواردی مثل دسترسی به NULL
. فرض کنید در برنامهی زیر مقدار اشارهگر NULL
بشه. اون وقت دسترسی به تابع یک شی NULL
اتفاق میافته که درست نیست. به طور کلی استفاده از ارجاع نسبت به اشارهگر مطمئنتره.
هیچ پژوهش انسانی نمیتواند ادعای علمی بودن داشته باشد، مگر اینکه از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)