- GCC 15 เพิ่มฟีเจอร์ C++26 จำนวนมาก และยังปรับปรุงฟีเจอร์บางส่วนของ C++23 ด้วย
- ฟีเจอร์ที่เพิ่มเข้ามาหลัก ๆ ได้แก่ Pack Indexing, Variadic Friends, การระบุเหตุผลของการลบ, คำสั่งเงื่อนไขแบบ structured binding เป็นต้น
- มีการเพิ่มออปชันคอมไพเลอร์และคำเตือนใหม่ ๆ เพื่อยกระดับ ประสบการณ์นักพัฒนา
- มีการเสริมการรองรับ C++ modules และปรับแต่งประสิทธิภาพความเร็วในการคอมไพล์เทมเพลต
- GCC 15 ถูกเลือกเป็นคอมไพเลอร์พื้นฐานของ Fedora 42 และจะพร้อมใช้งานใน Red Hat GCC Toolset ในเร็ว ๆ นี้
ฟีเจอร์ C++ ใหม่ใน GCC 15
- GCC 15.1 เปิดตัวเมื่อวันที่ 25 เมษายน 2025 และเริ่มรองรับฟีเจอร์ C++26 อย่างจริงจัง
- มาตรฐานเริ่มต้นยังคงเป็น
gnu++17 และสามารถเปิดใช้ฟีเจอร์ใหม่ด้วย -std=c++23, -std=c++26 เป็นต้น
- ฟีเจอร์ C++20, C++23 และ C++26 ยังถือเป็น experimental
ฟีเจอร์หลักของ C++26
-
Pack Indexing
- สามารถเข้าถึงสมาชิกเฉพาะจากอาร์กิวเมนต์ของ Variadic Template ได้โดยตรงด้วยไวยากรณ์
pack...[N]
- ทำให้อ้างอิงอาร์กิวเมนต์ตัวแรกและอื่น ๆ ได้อย่างสะอาดตาโดยไม่ต้องใช้เทคนิควนซ้ำ
-
การกำหนดแอตทริบิวต์ให้ Structured Bindings
- สามารถใช้
[[attribute]] แยกกับตัวแปรแต่ละตัวที่ได้จาก structured binding ได้
- ตัวอย่างเช่น สามารถกำหนด
[[deprecated]] ให้เฉพาะตัวแปร binding บางตัวได้
-
เพิ่มคำอธิบายให้ฟังก์ชันที่ถูกลบ
- ด้วยไวยากรณ์
= delete("เหตุผล") สามารถแสดง ข้อความ ในข้อผิดพลาดเมื่อมีการเรียกใช้ฟังก์ชันที่ถูกลบได้
-
Variadic Friends
- ในคลาสเทมเพลตสามารถประกาศ
friend ให้หลาย type พร้อมกันได้
- มีประโยชน์ในการเสริมการควบคุมการเข้าถึง เช่น Passkey pattern
-
constexpr Placement New
- สามารถใช้
std::allocator และ placement new ได้ในบริบท constexpr
-
การใช้ structured binding ในคำสั่งเงื่อนไข
- สามารถประกาศ structured binding ภายในเงื่อนไขของ
if, while, switch ได้
- การตัดสินเงื่อนไขจะอาศัยตัวแปรภายในที่คอมไพเลอร์สร้างขึ้น
-
ห้ามลบ incomplete type
- หากใช้
delete หรือ delete[] กับ incomplete type จะเกิดข้อผิดพลาดในการคอมไพล์ในโหมด C++26
-
คำเตือน Oxford comma
- ในการประกาศฟังก์ชันแบบ variadic รูปแบบที่ใช้เพียง
... โดยไม่มี , ... จะถูกเตือนใน C++26
-
ยกเลิกการเปรียบเทียบอาร์เรย์
- โค้ดที่ใช้
== เปรียบเทียบอาร์เรย์กับอาร์เรย์จะถูกมองเป็นข้อผิดพลาด
- เดิมใน C++20 เป็นเพียงคำเตือน แต่ตอนนี้ถูกยกระดับเป็นข้อผิดพลาดคอมไพล์ในโหมด C++26
-
คำสั่ง #embed
- รองรับ
#embed สำหรับฝังข้อมูลไบนารีลงในซอร์สโค้ดโดยตรง
ยังไม่มีความคิดเห็น