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

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;  // int

decltype(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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. auto decltype และการอนุมานชนิด
  2. range-based for nullptr และ enum class
  3. นิพจน์แลมบ์ดา: การจับค่า mutable generic
  4. การผูกแบบมีโครงสร้างและ if-init ใน C++17
← กลับไปที่ C++ Academy