ورود

View Full Version : نحوه استفاده و عدم استفاده از const در فراخوانی با ارجاع



chikar
پنج شنبه 21 اسفند 1393, 19:15 عصر
سلام
چرا وقتی از const در روش فراخوانی با ارجاع استفاده شود می توان مقدار را بدون تعریف متغیر مستقیما به پارامتر تابع ارسال نمود ولی در صورت عدم استفاده از const باید ابتدا یک متغیر ایجاد نمود و سپس آن متغیر را به صورت ارجاع به پارامتر تابع ارسال کرد
( به نظرم غیرقابل تغییر کردن مقدار ارسالی توسط const در تابع باعث این امر شده)

void MyFunck(int &a,const int &b) {};
void main()
{
int x=4;
MyFunck(x,7);
}

::چرا 4 را مستقیما و بدون تعریف x نمی توان ارسال نمود ولی 7 را مستقیما ارسال می کنیم::

rahnema1
پنج شنبه 21 اسفند 1393, 20:31 عصر
سلام
اگه یک رفرنس از نوع lvalue یعنی همین رفرنسی که با & مشخص میشه
بخواهد با یک عبارت، مقدار دهی اولیه بشه اگه این عبارت از نوع rvalue باشه یعنی مثل اینجا که 7 هست
در نتیجه حتما رفرنس باید const باشه و این رفرنس به یک شیء موقتی یا temporary به مرتبط میشه
به این صورت که یک شیء موقتی از نوع const int ایجاد میشه و این شیء موقتی با 7 مقدار دهی اولیه میشه
سپس رفرنس به اون شیء موقتی مرتبط یا bind میشه
و این شیء موقتی وقتی که عبارت ( MyFunck(x,7 کاملا اجرا شد از بین میره