การเข้าถึงค่า optional
ใช้ value_or และ has_value
การเข้าถึงค่า optional เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
ตัวดำเนินการยกเลิกการอ้างอิง
วิธีที่เร็วที่สุดในการอ่านออปชันนัลคือ *opt แต่ต้องใช้เมื่อแน่ใจว่ามีค่าอยู่เท่านั้น เพราะวิธีนี้ไม่มีการตรวจสอบ
#include <iostream>
#include <optional>
int main() {
std::optional<int> o = 10;
if (o) std::cout << *o << "\n";
}เมธอด value()
opt.value() ส่งคืนค่า แต่จะ โยนข้อยกเว้น std::bad_optional_access หากออปชันนัลว่าง ใช้เมื่อออปชันนัลว่างถือเป็นข้อผิดพลาดจริง
#include <iostream>
#include <optional>
int main() {
std::optional<int> o;
try { std::cout << o.value() << "\n"; }
catch (const std::bad_optional_access&) { std::cout << "empty!\n"; }
}value_or สำหรับค่าเริ่มต้น
opt.value_or(fallback) ส่งคืนค่าที่อยู่ภายในหากมีค่า มิฉะนั้นจะส่งคืนค่าทดแทน โดยไม่ต้องแยกแขนงและไม่เกิดข้อยกเว้น
#include <iostream>
#include <optional>
int main() {
std::optional<int> o = std::nullopt;
std::cout << o.value_or(-1) << "\n"; // -1
}value_or กับข้อมูลจริง
การใช้งานทั่วไปคือการกำหนดค่าเริ่มต้นให้กับการตั้งค่าหรือผลการค้นหาที่ไม่มีข้อมูล
#include <iostream>
#include <optional>
#include <string>
std::optional<std::string> lookup(bool found) {
if (found) return std::string("Pro");
return std::nullopt;
}
int main() {
std::cout << lookup(false).value_or("Free") << "\n";
}ตัวดำเนินการลูกศร
สำหรับออปชันนัลของชนิดคลาส opt->member จะเข้าถึงสมาชิกได้โดยตรง โดยยังคงมีข้อสมมติว่าออปชันนัลไม่ว่าง
#include <iostream>
#include <optional>
#include <string>
int main() {
std::optional<std::string> o = std::string("hello");
if (o) std::cout << o->size() << "\n";
}ตรวจสอบก่อนเข้าถึง
สำนวนที่ปลอดภัยคือ ตรวจสอบก่อนแล้วจึงใช้งาน การรวมการตรวจสอบและการเข้าถึงเข้าด้วยกันช่วยหลีกเลี่ยงทั้งข้อยกเว้นและพฤติกรรมไม่กำหนด
#include <iostream>
#include <optional>
int main() {
std::optional<int> o = 7;
if (o.has_value()) {
int x = *o;
std::cout << x * 2 << "\n";
}
}คำสั่งเริ่มต้นใน if
คุณสามารถประกาศและตรวจสอบได้ในบรรทัดเดียวด้วยคำสั่งเริ่มต้นของ if โดยจำกัดขอบเขตของออปชันนัลไว้เฉพาะในแขนงนั้น
#include <iostream>
#include <optional>
std::optional<int> find() { return 3; }
int main() {
if (auto v = find(); v.has_value())
std::cout << *v << "\n";
}การแปลง (C++23)
ตัวช่วยแบบโมนาด เช่น transform จะใช้ฟังก์ชันเฉพาะเมื่อมีค่าอยู่ และส่งคืนออปชันนัลตัวใหม่ วิธีนี้ช่วยเชื่อมการคำนวณได้อย่างเป็นระเบียบ
and_then สำหรับการเชื่อมต่อ
and_then (C++23) เรียกใช้ฟังก์ชันที่ตัวมันเองส่งคืนออปชันนัล แล้วทำให้ผลลัพธ์ที่ซ้อนกันถูกคลี่ออก เหมาะสำหรับขั้นตอนที่แต่ละขั้นอาจไม่สำเร็จ
การเลือกตัวเข้าถึง
ใช้ value_or เมื่อมีค่าเริ่มต้นที่เหมาะสม ใช้ value() เมื่อความว่างเปล่าเป็นข้อผิดพลาดที่ควรทำให้เกิดข้อยกเว้น และใช้ */-> หลังจากตรวจสอบอย่างชัดเจนแล้วเท่านั้น
หลีกเลี่ยงการยกเลิกการอ้างอิงโดยไม่ตรวจสอบ
อย่าเรียกใช้ *opt โดยไม่ยืนยันก่อนว่าออปชันนัลไม่ว่าง เพราะจะทำให้เกิดพฤติกรรมไม่กำหนดและเป็นสาเหตุที่พบได้บ่อยของโปรแกรมขัดข้อง
ตรวจสอบความเข้าใจอย่างรวดเร็ว
ตรวจสอบความเข้าใจของคุณเกี่ยวกับการเข้าถึงออปชันนัล
ทบทวน
คุณได้เรียนรู้วิธีเข้าถึงออปชันนัล:
- ใช้
*และ->หลังจากตรวจสอบแล้ว value()จะโยนข้อยกเว้นเมื่อว่างvalue_orจะจัดเตรียมค่าเริ่มต้น- ใช้
transform/and_thenแบบโมนาดเพื่อเชื่อมการดำเนินการ (C++23)
คำถามที่พบบ่อย
บทเรียน “การเข้าถึงค่า optional” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การเข้าถึงค่า optional” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การเข้าถึงค่า optional”
ใช้ value_or และ has_value คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การเข้าถึงค่า optional” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม
ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การแทนค่าที่ไม่มีอยู่ด้วย optional
- การเข้าถึงค่า optional
- พื้นฐาน std::expected
- รูปแบบการจัดการข้อผิดพลาด