ฟีเจอร์ C++ ใหม่ใน GCC 15
(developers.redhat.com)- 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] - ทำให้อ้างอิงอาร์กิวเมนต์ตัวแรกและอื่น ๆ ได้อย่างสะอาดตาโดยไม่ต้องใช้เทคนิควนซ้ำ
- สามารถเข้าถึงสมาชิกเฉพาะจากอาร์กิวเมนต์ของ Variadic Template ได้โดยตรงด้วยไวยากรณ์
-
การกำหนดแอตทริบิวต์ให้ 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ได้ - การตัดสินเงื่อนไขจะอาศัยตัวแปรภายในที่คอมไพเลอร์สร้างขึ้น
- สามารถประกาศ structured binding ภายในเงื่อนไขของ
-
ห้ามลบ incomplete type
- หากใช้
deleteหรือdelete[]กับ incomplete type จะเกิดข้อผิดพลาดในการคอมไพล์ในโหมด C++26
- หากใช้
-
คำเตือน Oxford comma
- ในการประกาศฟังก์ชันแบบ variadic รูปแบบที่ใช้เพียง
...โดยไม่มี, ...จะถูกเตือนใน C++26
- ในการประกาศฟังก์ชันแบบ variadic รูปแบบที่ใช้เพียง
-
ยกเลิกการเปรียบเทียบอาร์เรย์
- โค้ดที่ใช้
==เปรียบเทียบอาร์เรย์กับอาร์เรย์จะถูกมองเป็นข้อผิดพลาด - เดิมใน C++20 เป็นเพียงคำเตือน แต่ตอนนี้ถูกยกระดับเป็นข้อผิดพลาดคอมไพล์ในโหมด C++26
- โค้ดที่ใช้
-
คำสั่ง
#embed- รองรับ
#embedสำหรับฝังข้อมูลไบนารีลงในซอร์สโค้ดโดยตรง
- รองรับ
ยังไม่มีความคิดเห็น