auto decltype และการอนุมานชนิด
ให้คอมไพเลอร์อนุมานชนิดด้วย auto และ decltype เพื่อเขียนโค้ดได้กระชับขึ้น
auto decltype และการอนุมานชนิด เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
การอนุมานชนิดใน C++ สมัยใหม่
ตั้งแต่ C++11 เป็นต้นมา คอมไพเลอร์สามารถอนุมานชนิดได้ในหลายตำแหน่ง ทำให้โค้ดสั้นลงและเกิดข้อผิดพลาดได้ยากขึ้นเมื่อใช้อย่างเหมาะสม
คีย์เวิร์ด auto
auto จะอนุมานชนิดจากตัวกำหนดค่าเริ่มต้นขณะคอมไพล์ ตัวแปรยังคงมีชนิดที่ตายตัวและเป็นที่ทราบแบบสแตติก
auto i = 42; // int
auto d = 3.14; // double
auto s = "hello"; // const char*
auto v = std::vector<int>{1,2,3}; // std::vector<int>auto และ const
โดยค่าเริ่มต้น auto จะตัด const ระดับบนสุดและรีเฟอเรนซ์ออก ให้เพิ่มสิ่งเหล่านี้อย่างชัดเจนเมื่อคุณต้องการเก็บไว้
const int n = 10;
auto a = n; // int (const dropped)
const auto& b = n; // const int&auto กับตัววนซ้ำ
ชื่อชนิดของตัววนซ้ำมักยาวมาก auto จึงมีประโยชน์อย่างยิ่งในกรณีนี้
std::map<std::string, int> ages = {{"Ada", 30}};
auto it = ages.find("Ada");
// vs std::map<std::string,int>::iterator it = ...for แบบวนตามช่วงและ auto
ใช้ auto& เพื่อวนข้อมูลโดยไม่ต้องคัดลอก
for (const auto& [name, age] : ages) {
std::cout << name << ": " << age << "\n";
}ชนิดผลลัพธ์ต่อท้าย
ฟังก์ชันสามารถใช้ auto เป็นตัวแทนชนิดผลลัพธ์ แล้วระบุชนิดด้วยลูกศรต่อท้าย ซึ่งสะดวกสำหรับเทมเพลต
auto add(int a, int b) -> int {
return a + b;
}การอนุมานชนิดผลลัพธ์ใน C++14
C++14 อนุญาตให้ใช้ชนิดผลลัพธ์เป็น auto แบบปกติ โดยคอมไพเลอร์จะอนุมานจากคำสั่ง return
auto multiply(double x, double y) {
return x * y; // deduced as double
}decltype: รับชนิดของนิพจน์
decltype(expr) ให้ชนิดของ expr ขณะคอมไพล์ ต่างจาก auto ตรงที่ยังคงรีเฟอเรนซ์และ const ไว้
int x = 0;
int& r = x;
decltype(r) ref = x; // int&
decltype(x) val = 0; // intdecltype(auto)
ผสานการอนุมานเข้ากับกฎของ decltype — รักษาชนิดข้อมูลของนิพจน์ที่ตรงตามจริง รวมถึงประเภทค่า
auto a = some_func(); // copy
decltype(auto) b = some_func(); // exact type, including referencesเมื่อใดควรหลีกเลี่ยง auto
หลีกเลี่ยง auto เมื่อชนิดข้อมูลที่อนุมานได้ไม่ชัดเจน — เช่น ลิเทอรัลตัวเลขขนาดใหญ่ การคำนวณต่างชนิด หรือขนาดที่ขึ้นอยู่กับแพลตฟอร์ม โปรดระบุชนิดข้อมูลอย่างชัดเจนเพื่อให้อ่านง่าย
รูปแบบที่ใช้ auto เกือบทุกกรณี
คู่มือรูปแบบบางฉบับแนะนำให้ใช้ auto กับตัวแปรทั้งหมด เพื่อหลีกเลี่ยงการแปลงชนิดข้อมูลโดยไม่แจ้งเตือน บางฉบับชอบระบุชนิดข้อมูลอย่างชัดเจนมากกว่า โปรดเลือกแนวปฏิบัติหนึ่งแบบและใช้ให้สม่ำเสมอ
ตรวจสอบความเข้าใจ
เมื่อส่งคืนการอ้างอิง auto แตกต่างจาก decltype(auto) อย่างไร
สรุปทบทวน
auto อนุมานชนิดข้อมูลจากตัวกำหนดค่าเริ่มต้น decltype ระบุชนิดข้อมูลของนิพจน์ ส่วน decltype(auto) อนุมานโดยรักษาการอ้างอิงไว้ ใช้สิ่งเหล่านี้เพื่อลดโค้ดที่รก — แต่ยังคงรักษาความอ่านง่าย
คำถามที่พบบ่อย
บทเรียน “auto decltype และการอนุมานชนิด” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “auto decltype และการอนุมานชนิด” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “auto decltype และการอนุมานชนิด”
ให้คอมไพเลอร์อนุมานชนิดด้วย auto และ decltype เพื่อเขียนโค้ดได้กระชับขึ้น คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “auto decltype และการอนุมานชนิด” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม
ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- auto decltype และการอนุมานชนิด
- range-based for nullptr และ enum class
- นิพจน์แลมบ์ดา: การจับค่า mutable generic
- การผูกแบบมีโครงสร้างและ if-init ใน C++17