0Pricing
C++ Academy · บทเรียน

เหตุใดรีเฟอเรนซ์จึงเป็นนามแฝงของตัวแปร

ทำความรู้จักรีเฟอเรนซ์ในฐานะนามแฝงระหว่างการคอมไพล์ ซึ่งเปลี่ยนไปอ้างอิงสิ่งอื่นหรือตั้งเป็นค่าว่างไม่ได้

เหตุใดรีเฟอเรนซ์จึงเป็นนามแฝงของตัวแปร เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เหตุใดรีเฟอเรนซ์จึงเป็นนามแฝงของตัวแปร
  2. การส่งค่าเทียบกับการส่งรีเฟอเรนซ์
  3. รีเฟอเรนซ์ const และแนวทางการใช้งาน
  4. อายุการใช้งานของรีเฟอเรนซ์และรีเฟอเรนซ์ลอย
← กลับไปที่ C++ Academy