รีเฟอเรนซ์ const และแนวทางการใช้งาน
ส่งออบเจ็กต์ขนาดใหญ่ได้อย่างมีประสิทธิภาพและปลอดภัยด้วยรีเฟอเรนซ์ const
รีเฟอเรนซ์ const และแนวทางการใช้งาน เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
สิ่งที่การอ้างอิงแบบ const รับรอง
const T& หมายความว่า "ฉันจะไม่แก้ไขสิ่งที่ฉันอ้างถึง" และคอมไพเลอร์จะบังคับใช้กฎนี้
void print(const std::string& s) {
// s.clear(); // ERROR: s is const
std::cout << s;
}เหตุใดจึงไม่ส่งแบบค่าไปเลย
การคัดลอกวัตถุขนาดใหญ่สิ้นเปลือง การอ้างอิงแบบ const แทบไม่มีต้นทุน (ภายในทำงานเหมือน pointer) และไม่เปิดโอกาสให้ฟังก์ชันแก้ไขข้อมูลของตัวเรียก
ผูกกับค่าใดก็ได้
การอ้างอิงแบบ const สามารถผูกกับ lvalue, rvalue และค่าชั่วคราวได้ จึงเป็นชนิดพารามิเตอร์ที่ยืดหยุ่นที่สุดสำหรับการเข้าถึงแบบอ่านอย่างเดียว
void f(const std::string& s);
std::string a = "hi";
f(a); // lvalue
f("hello"); // temporary string
f(std::move(a)); // rvalueการขยายอายุการใช้งาน
การผูกค่าชั่วคราวกับการอ้างอิงแบบ const จะขยายอายุการใช้งานของค่าชั่วคราวให้เท่ากับอายุการใช้งานของการอ้างอิง เหมาะสำหรับการสร้างวัตถุแบบแทรกในนิพจน์
const std::string& greeting = "Hello, " + name;
// the concatenated string lives as long as `greeting`เมื่อใดไม่ควรใช้การอ้างอิงแบบ const
สำหรับชนิดข้อมูลที่คัดลอกได้โดยตรง (int, double, pointer) ให้ส่งแบบค่า การอ้างอิงจะเพิ่มการอ้างอิงทางอ้อมโดยไม่ช่วยประหยัดสิ่งใด
การอ้างอิงแบบ const ใน for แบบอิงช่วงข้อมูล
นี่คือรูปแบบมาตรฐานสำหรับลูปแบบอ่านอย่างเดียว ซึ่งหลีกเลี่ยงทั้งการคัดลอกและการแก้ไขข้อมูลโดยไม่ตั้งใจ
for (const auto& x : container) {
process(x);
}การส่งคืนการอ้างอิงแบบ const
ส่งคืนการอ้างอิงแบบ const เมื่อผลลัพธ์เป็นวัตถุที่มีอยู่แล้วและตัวเรียกไม่ควรแก้ไข เช่น สมาชิกหรือค่าที่เก็บไว้ใน Cache
class Person {
std::string name_;
public:
const std::string& name() const { return name_; }
};ความถูกต้องของ const
กำหนดพารามิเตอร์และฟังก์ชันสมาชิกทุกตัวที่ไม่แก้ไขสถานะให้เป็น const คอมไพเลอร์จะตรวจจับการเขียนที่เกิดขึ้นโดยไม่ตั้งใจ ซึ่งเป็นกลไกป้องกันที่มีประสิทธิภาพ
ฟังก์ชันสมาชิกแบบ const
ฟังก์ชันสมาชิกที่กำกับด้วย const หลังรายการพารามิเตอร์จะไม่สามารถแก้ไขวัตถุได้ และสามารถเรียกใช้กับอินสแตนซ์แบบ const
class Counter {
int n_ = 0;
public:
int value() const { return n_; } // pure reader
void increment() { n_++; }
};ข้อควรระวัง: const_cast ลบ const
คุณสามารถลบ const ออกด้วย const_cast ได้ แต่หากทำกับวัตถุที่เดิมเป็น const จะเป็นพฤติกรรมที่ไม่ได้กำหนด ใช้เฉพาะเมื่อต้องทำงานร่วมกับส่วนเชื่อมต่อแบบไม่ใช่ const รุ่นเก่า
ใช้ mutable สำหรับสถานะภายใน
คีย์เวิร์ด mutable อนุญาตให้ฟังก์ชันสมาชิกแบบ const แก้ไขสมาชิกบางตัวได้ ซึ่งมีประโยชน์สำหรับการเก็บ Cache หรือการใช้ mutex
class Cache {
mutable std::mutex mtx_;
mutable std::optional<int> cached_;
public:
int value() const {
std::lock_guard<std::mutex> lk(mtx_);
// ...
}
};ตรวจสอบความเข้าใจ
เหตุใดโดยทั่วไปจึงควรเขียน const std::string& แทน std::string สำหรับพารามิเตอร์
สรุปทบทวน
ใช้ const T& สำหรับพารามิเตอร์แบบอ่านอย่างเดียว ค่าที่ส่งคืนจากฟังก์ชันอ่านค่า และลูปแบบอิงช่วงข้อมูล สำหรับชนิดที่ไม่ใช่ชนิดพื้นฐานอย่างง่าย รูปแบบนี้เร็วกว่าแบบค่าและปลอดภัยกว่าการอ้างอิงที่ไม่ใช่ const
เรียนรู้ C++ ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 51
- บทเรียน
- 203
คำถามที่พบบ่อย
บทเรียน “รีเฟอเรนซ์ const และแนวทางการใช้งาน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “รีเฟอเรนซ์ const และแนวทางการใช้งาน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “รีเฟอเรนซ์ const และแนวทางการใช้งาน”
ส่งออบเจ็กต์ขนาดใหญ่ได้อย่างมีประสิทธิภาพและปลอดภัยด้วยรีเฟอเรนซ์ const คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “รีเฟอเรนซ์ const และแนวทางการใช้งาน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม
ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุใดรีเฟอเรนซ์จึงเป็นนามแฝงของตัวแปร
- การส่งค่าเทียบกับการส่งรีเฟอเรนซ์
- รีเฟอเรนซ์ const และแนวทางการใช้งาน
- อายุการใช้งานของรีเฟอเรนซ์และรีเฟอเรนซ์ลอย