คู่มือ C++ สมัยใหม่
คู่มือการเรียนนี้มีวัตถุประสงค์เพื่อให้ผู้พัฒนาที่มีประสบการณ์ได้รับข้อมูลอ้างอิงอย่างรวดเร็วเกี่ยวกับคุณสมบัติใหม่ของ C++11/14/17/20 โดยครอบคลุมการปรับปรุงด้านความสามารถในการใช้งานของภาษา ประสิทธิภาพในช่วงเวลาทำงาน โครงสร้างข้อมูลใหม่ ตัวชี้อัจฉริยะและการจัดการหน่วยความจำ การจัดรูปแบบแบบสม่ำเสมอ การเขียนโปรแกรมแบบขนาน และบทนำสำหรับ C++20
ภาพรวมคอร์สเรียน
สรุปเนื้อหา
คู่มือการเรียนนี้ออกแบบมาเพื่อให้ผู้พัฒนาที่มีประสบการณ์ได้ใช้เป็นแนวทางย่อสำหรับคุณสมบัติใหม่ของ C++11/14/17/20 โดยเนื้อหาครอบคลุมการปรับปรุงด้านความสะดวกในการใช้งานของภาษา การปรับปรุงประสิทธิภาพในเวลาทำงาน การใช้คอนเทนเนอร์ใหม่ ชี้แจงตัวชี้วัดและจัดการหน่วยความจำ แบบแสดงรูปแบบ (Regular Expressions) การเขียนโปรแกรมแบบขนาน และการทบทวนลักษณะสำคัญของ C++20
เรียนรู้อย่างรวดเร็วเกี่ยวกับ C++11/14/17/20 และก้าวข้ามสู่โลกของการเขียนโปรแกรมแบบสมัยใหม่ของภาษา C++
ผู้เขียน: โอ่ว เฉียงกุน (Ou Changkun)
คำขอบคุณ: อนุญาตภายใต้ข้อกำหนดแบบ CC BY-NC-ND 4.0 ขอขอบคุณผู้มีส่วนร่วมทุกคนบน GitHub และชุมชนสนับสนุนที่เกี่ยวข้อง
เป้าหมายการเรียนรู้
- ระบุและตรวจสอบสภาพแวดล้อมคอมไพเลอร์ C++ และสถาปัตยกรรมเป้าหมายโดยใช้เครื่องมือจากบรรทัดคำสั่ง
- อธิบายความเข้ากันได้ของมาตรฐานและประวัติที่ทับซ้อนกันระหว่างภาษา C (C89, C99, C11) และภาษา C++ (C++98, C++1x)
- ใช้หัวไฟล์
extern "C"และกระบวนการคอมไพล์หลายขั้นตอน เพื่อจัดการการเชื่อมต่อข้ามภาษาอย่างมีประสิทธิภาพ - แก้ไขความไม่แน่นอนของตัวชี้ (pointer ambiguity) โดยใช้
nullptrและใช้constexprและif constexprเพื่อสร้างตรรกะในขณะคอมไพล์ - ลดความซับซ้อนของคำประกาศโดยใช้
auto,decltype, และการตั้งชื่อประเภท (using) พร้อมรักษาหลักการออกแบบเชิงวัตถุที่แข็งแรงด้วยoverrideและfinal - ออกแบบโค้ดที่มีความยืดหยุ่นสูงโดยใช้เทมเพลตแบบตัวแปร (variadic templates), นิพจน์แบบพับ (fold expressions), และการอนุมานพารามิเตอร์เทมเพลตที่ไม่ใช่ประเภท (non-type template parameter deduction)
- กำหนดและดำเนินการใช้ฟังก์ชันลัมบ์ (Lambda expressions) โดยใช้โหมดการจับข้อมูลต่างๆ (ค่า, ค่าอ้างอิง, นิพจน์, และทั่วไป)
- ใช้
std::functionและstd::bindเพื่อสร้างฟังก์ชันที่ยืดหยุ่นและแอปพลิเคชันฟังก์ชันบางส่วน - แยกประเภทนิพจน์ออกเป็น Lvalues, Prvalues, และ Xvalues และนำแนวคิดการเคลื่อนย้ายทรัพยากร (Move Semantics) มาใช้เพื่อเพิ่มประสิทธิภาพการจัดการทรัพยากรในคลาส
- แยกแยะโมเดลหน่วยความจำและกรณีใช้งานของ
std::array(ขนาดคงที่, บนสแต็ก) กับstd::vector(ขนาดเปลี่ยนแปลงได้, บนฮีป)