เหตุใดรีเฟอเรนซ์จึงเป็นนามแฝงของตัวแปร
ทำความรู้จักรีเฟอเรนซ์ในฐานะนามแฝงระหว่างการคอมไพล์ ซึ่งเปลี่ยนไปอ้างอิงสิ่งอื่นหรือตั้งเป็นค่าว่างไม่ได้
เหตุใดรีเฟอเรนซ์จึงเป็นนามแฝงของตัวแปร เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
การอ้างอิงคืออะไร
reference คือชื่อแทนอีกตัวแปรหนึ่งที่กำหนดในเวลาคอมไพล์ ไม่ใช่ pointer และไม่ใช่สำเนา แต่เป็นวัตถุเดียวกันภายใต้ชื่ออื่น
ไวยากรณ์ของการอ้างอิง
ใส่ & หลังชนิดข้อมูล การอ้างอิงต้องได้รับการกำหนดค่าเริ่มต้นเมื่อประกาศ และไม่สามารถเปลี่ยนไปผูกกับวัตถุอื่นได้
int x = 10;
int& ref = x; // ref is an alias for x
ref = 20; // x is now 20เปรียบเทียบกับพอยน์เตอร์
การอ้างอิงและ pointer ต่างก็ใช้การเข้าถึงทางอ้อม แต่มีความแตกต่างดังนี้:
- การอ้างอิงต้องได้รับการกำหนดค่าเริ่มต้น ส่วน pointer สามารถเป็นค่าว่างได้
- การอ้างอิงไม่สามารถกำหนดให้ไปอ้างวัตถุอื่นใหม่ได้
- การอ้างอิงไม่ใช้
*หรือ->แต่มีลักษณะเหมือนตัวแปรทั่วไป
ไม่สามารถผูกใหม่ได้
เมื่อผูกแล้ว การอ้างอิงจะอ้างถึงวัตถุเดิมเสมอ การกำหนดค่าให้การอ้างอิงจะเปลี่ยนค่าของวัตถุที่อยู่เบื้องหลัง ไม่ใช่เปลี่ยนตัวการอ้างอิงเอง
int a = 1, b = 2;
int& r = a;
r = b; // a becomes 2, r still refers to aการอ้างอิงมีที่อยู่เดียวกัน
การอ้างอิงทำงานเสมือนเป็นตัวแปรต้นฉบับ การหาที่อยู่ของการอ้างอิงจึงได้ที่อยู่ของวัตถุที่ถูกอ้างถึง
int x = 42;
int& r = x;
std::cout << (&r == &x); // 1 (true)การอ้างอิงแบบ const
การอ้างอิงแบบ const คือชื่อแทนแบบอ่านอย่างเดียว เหมาะสำหรับส่งวัตถุขนาดใหญ่โดยไม่ต้องคัดลอก
void print(const std::string& s) {
std::cout << s; // can read, not modify
}การผูกการอ้างอิงแบบ const กับค่าชั่วคราว
การอ้างอิงแบบ const จะขยายอายุการใช้งานของค่าชั่วคราวให้เท่ากับอายุการใช้งานของตัวการอ้างอิงเอง ซึ่งมีประโยชน์ในนิพจน์
const std::string& greeting = std::string("Hi");
std::cout << greeting; // validการอ้างอิงเป็นชนิดค่าที่ส่งคืน
ฟังก์ชันสามารถส่งคืนการอ้างอิงได้ ซึ่งมีประโยชน์สำหรับการเรียกต่อเนื่องหรือการให้เข้าถึงสมาชิกโดยตรง โปรดระวังการส่งคืนการอ้างอิงไปยังตัวแปรภายในฟังก์ชัน
int& at(std::vector<int>& v, size_t i) {
return v[i];
}
at(v, 0) = 99; // modifies v[0]อย่าส่งคืนการอ้างอิงไปยังตัวแปรภายในฟังก์ชัน
ตัวแปรภายในจะหมดอายุเมื่อฟังก์ชันส่งคืนค่า และการอ้างอิงจะกลายเป็นการอ้างอิงค้าง นี่เป็นพฤติกรรมที่ไม่ได้กำหนด
// BUG
int& bad() {
int x = 10;
return x; // x dies here
}การอ้างอิงใน for แบบอิงช่วงข้อมูล
for แบบอิงช่วงข้อมูลใช้การอ้างอิงโดยปริยาย auto& จะได้การอ้างอิง ส่วน auto จะได้สำเนา
การอ้างอิงในการผูกแบบมีโครงสร้าง
การผูกแบบมีโครงสร้างของ C++17 สามารถผูกแบบค่า แบบการอ้างอิง หรือแบบการอ้างอิงแบบ const ได้
std::pair<int, int> p = {1, 2};
auto [a, b] = p; // copies
auto& [x, y] = p; // references — modifying x changes p.firstตรวจสอบความเข้าใจ
เหตุใดการอ้างอิงจึงไม่สามารถเปลี่ยนไปผูกกับตัวแปรอื่นในภายหลังได้
สรุปทบทวน
การอ้างอิงคือชื่อแทนที่กำหนดในเวลาคอมไพล์ ซึ่งต้องได้รับการกำหนดค่าเริ่มต้นและไม่สามารถเปลี่ยนไปผูกกับวัตถุอื่นได้ มีลักษณะเหมือนตัวแปรทั่วไป ไม่เป็นค่าว่าง และไม่สามารถกำหนดให้ไปอ้างวัตถุอื่นใหม่ได้ ใช้การอ้างอิงแบบ const สำหรับมุมมองแบบอ่านอย่างเดียว
คำถามที่พบบ่อย
บทเรียน “เหตุใดรีเฟอเรนซ์จึงเป็นนามแฝงของตัวแปร” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “เหตุใดรีเฟอเรนซ์จึงเป็นนามแฝงของตัวแปร” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “เหตุใดรีเฟอเรนซ์จึงเป็นนามแฝงของตัวแปร”
ทำความรู้จักรีเฟอเรนซ์ในฐานะนามแฝงระหว่างการคอมไพล์ ซึ่งเปลี่ยนไปอ้างอิงสิ่งอื่นหรือตั้งเป็นค่าว่างไม่ได้ คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “เหตุใดรีเฟอเรนซ์จึงเป็นนามแฝงของตัวแปร” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม
ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุใดรีเฟอเรนซ์จึงเป็นนามแฝงของตัวแปร
- การส่งค่าเทียบกับการส่งรีเฟอเรนซ์
- รีเฟอเรนซ์ const และแนวทางการใช้งาน
- อายุการใช้งานของรีเฟอเรนซ์และรีเฟอเรนซ์ลอย