- GCC 15 đã bổ sung hàng loạt tính năng C++26, đồng thời cải thiện một số tính năng của C++23
- Các bổ sung chính gồm Pack Indexing, Variadic Friends, chỉ rõ lý do xóa, câu lệnh điều kiện với structured binding v.v.
- Các tùy chọn trình biên dịch và cảnh báo mới cũng được giới thiệu, giúp cải thiện trải nghiệm nhà phát triển
- Hỗ trợ C++ module được tăng cường và tốc độ biên dịch template đã được tối ưu
- GCC 15 đã được chọn làm trình biên dịch mặc định của Fedora 42 và sắp được cung cấp trong Red Hat GCC Toolset
Các tính năng C++ mới trong GCC 15
- GCC 15.1 đã được phát hành vào ngày 25/4/2025 và chính thức đưa vào nhiều tính năng C++26
- Tiêu chuẩn mặc định vẫn là
gnu++17, và có thể kích hoạt các tính năng mới bằng -std=c++23, -std=c++26 v.v.
- Các tính năng C++20, C++23, C++26 hiện vẫn ở trạng thái thử nghiệm (experimental)
Các tính năng chính của C++26
-
Pack Indexing
- Giờ đây có thể truy cập trực tiếp một phần tử cụ thể trong đối số Variadic Template bằng cú pháp
pack...[N]
- Có thể tham chiếu gọn gàng tới đối số đầu tiên mà không cần các mẹo lặp lại
-
Chỉ định thuộc tính cho Structured Bindings
- Giờ đây có thể áp dụng riêng
[[attribute]] cho từng biến trong structured binding
- Ví dụ, có thể chỉ đánh dấu một biến binding cụ thể là
[[deprecated]]
-
Thêm mô tả cho hàm bị xóa
- Cú pháp
= delete("lý do") cho phép cung cấp thông điệp trong lỗi gọi tới hàm đã bị xóa
-
Variadic Friends
- Trong lớp template, có thể khai báo nhiều kiểu là
friend cùng lúc
- Hữu ích để tăng cường kiểm soát truy cập như trong mẫu Passkey
-
constexpr Placement New
- Có thể dùng
std::allocator và placement new trong ngữ cảnh constexpr
-
Dùng structured binding trong câu lệnh điều kiện
- Có thể khai báo structured binding trong điều kiện của
if, while, switch
- Việc đánh giá điều kiện được thực hiện thông qua biến nội bộ do trình biên dịch tạo ra
-
Cấm xóa kiểu chưa hoàn chỉnh
- Nếu dùng
delete hoặc delete[] với kiểu chưa hoàn chỉnh, ở chế độ C++26 sẽ phát sinh lỗi biên dịch
-
Cảnh báo dấu phẩy Oxford
- Trong khai báo hàm variadic, mẫu chỉ dùng
... mà không có , ... sẽ bị cảnh báo trong C++26
-
Loại bỏ so sánh mảng
- Mã so sánh
== giữa các mảng sẽ bị xử lý là lỗi
- Trong C++20 trước đây đây là cảnh báo, nhưng nay đã được nâng thành lỗi biên dịch ở chế độ C++26
-
Chỉ thị #embed
- Hỗ trợ
#embed để chèn trực tiếp dữ liệu nhị phân vào mã nguồn
Chưa có bình luận nào.