مراجع (References)
مراجع به یک برنامه نویس اجازه میدهند تا یک نام جدید را برای یک متغیر ایجاد کند. مراجع نسبت به اشاره گرها سادهتر، قابل اطمینان تر ولی با قدرت کمتر هستند.
ایجاد یک مرجع
تعریف یک مرجع مانند تعریف یک متغیر معمولی است با این تفاوت که یک ampersand یا & بین نوع داده و نام متغیر قرار میگیرد. علاوه بر این، در همان زمانی که یک مرجع تعریف میشود باید با یک متغیر از نوع داده مشخص شده مقدار دهی اولیه شود.
int x = 5; int& r = x; // r is an alias to x int &s = x; // alternative syntax
اولین باری که یک مرجع مقداردهی شد، هرگز نمیتواند به جای متغیر دیگری بنشیند. مرجع به یک نام مستعار برای متغیر تبدیل میشود و میتواند دقیقاً مانند همان متغیر اصلی مورد استفاده قرار گیرد.
r = 10; // assigns value to r/x
مراجع و اشاره گرها
یک مرجع شبیه به یک اشاره گر است که همیشه به یک چیز اشاره میکند. در حالی که یک اشاره گر، متغیری است که میتواند به دیگر متغیرها اشاره کند، یک مرجع فقط یک نام مستعار است و آدرس خودش را ندارد.
int* ptr = &x; // ptr assigned address to x
استفاده از مرجع و اشاره گر
هر زمان که شما به یک اشاره گر نیاز دارید ولی هرگز نمیخواهید آن را تغییر دهید، بهتر است از مرجع به جای اشاره گر استفاده کنید زیرا از آنجایی که میخواهید همیشه به یک متغیر اشاره کنید، یک مرجع قابل اطمینان تر از یک اشاره گر است. این به این معنی است که در یک مرجع نیاز ندارید تا بررسی کنید که آیا این مرجع به null اشاره میکند یا خیر، در حالی که در اشاره گرها بهتر است تا این بررسی انجام شود. همچنین احتمال آن وجود دارد که یک مرجع نامعتبر شود. برای مثال اگر یک مرجع به یک null pointer اشاره کند مقدارش نا معتبر میشود. اما جلوگیری از این نوع خطاها، زمانی که با یک مرجع کار میکنیم آسانتر از اشاره گرهاست.
int* ptr = 0; // null pointer int& ref = *ptr; ref = 10; // segmentation fault (invalid memory access)