ตัวแปร Reference เป็น alias (ชื่อเรียกทางเลือก) กล่าวคือ อีกชื่อหนึ่งสำหรับตัวแปรที่มีอยู่แล้ว เมื่อ Reference ถูกเริ่มต้นกับตัวแปร ทั้งชื่อตัวแปรและชื่อ Reference สามารถใช้เพื่ออ้างถึงตัวแปรนั้นได้
Reference vs Pointer
Reference มักสับสนกับ Pointer แต่มีความแตกต่างหลัก 3 จุด ดังนี้ -
ไม่สามารถมี NULL Reference ได้ คุณต้องมั่นใจได้เสมอว่า Reference เชื่อมโยงกับหน่วยความจำที่ถูกต้อง
เมื่อ Reference ถูกเริ่มต้นกับออบเจกต์แล้ว จะไม่สามารถเปลี่ยนไปอ้างอิงออบเจกต์อื่นได้ Pointer สามารถชี้ไปยังออบเจกต์อื่นได้ตลอดเวลา
Reference ต้องถูกเริ่มต้นเมื่อถูกสร้าง Pointer สามารถเริ่มต้นได้ทุกเมื่อ
การสร้าง Reference ใน C++
คิดว่าชื่อตัวแปรเป็นป้ายกำกับที่ติดอยู่ที่ตำแหน่งหน่วยความจำของตัวแปร คุณสามารถคิดว่า Reference เป็นป้ายกำกับอีกอันหนึ่งที่ติดอยู่ที่ตำแหน่งหน่วยความจำเดียวกัน ดังนั้น คุณสามารถเข้าถึงเนื้อหาของตัวแปรได้ทั้งผ่านชื่อตัวแปรต้นฉบับและชื่อ Reference ตัวอย่างเช่น สมมติเรามีดังนี้ -
int i = 17;
เราสามารถประกาศตัวแปร Reference สำหรับ i ได้ดังนี้
int& r = i;
อ่านเครื่องหมาย & ในประกาศเหล่านี้ว่า "reference" ดังนั้น อ่านประกาศแรกว่า "r เป็น integer reference ที่เริ่มต้นด้วย i"
ตัวอย่างโค้ด
#include <iostream>
using namespace std;
int main() {
// ประกาศตัวแปรธรรมดา
int i;
double d;
// ประกาศตัวแปร Reference
int& r = i;
double& s = d;
i = 5;
cout << "Value of i : " << i << endl;
cout << "Value of i reference : " << r << endl;
d = 11.7;
cout << "Value of d : " << d << endl;
cout << "Value of d reference : " << s << endl;
return 0;
}
ผลลัพธ์
Value of i : 5 Value of i reference : 5 Value of d : 11.7 Value of d reference : 11.7