C++17 là phiên bản mới nhất của chuẩn C++ (tính đến thời điểm bài viết). C++11 và C++14 là các phiên bản trước đó. Phiên bản này bổ sung nhiều tính năng vào ngôn ngữ cốt lõi và loại bỏ một số tính năng cũ. C++17 được biết đến như một bản phát hành "đầy đủ tính năng" (feature complete).
Thay đổi thư viện - Tiện ích (utils)
Đây là một trong những tính năng tuyệt vời nhất của C++17. Nó hội tụ các đặc điểm và mẫu thiết kế từ các thư viện khác. Nhiều thư viện con được hợp nhất vào chuẩn.
Các tính năng mới trong thư viện utils:
std::variant- Kiểu dữ liệu union an toàn kiểustd::optional- Biểu diễn giá trị có thể có hoặc khôngstd::any- Chứa giá trị bất kỳ kiểu nàostd::string_view- Xem chuỗi không sở hữu (zero-copy)std::search- Thuật toán tìm kiếm chung
Thay đổi thư viện - Hệ thống tệp (Filesystem)
Các thư viện chuẩn trước đây thiếu các tính năng quan trọng. Ủy ban C++ đã nâng cấp và hợp nhất nhiều hệ thống vào chuẩn.
- Làm việc với đối tượng đường dẫn (path object)
- Hỗ trợ trình biên dịch/thư viện
- Duyệt đường dẫn (traversing)
Thay đổi thư viện - Thuật toán song song (Parallel Algorithms)
Mở rộng các thuật toán từ C++11/14, mở khóa tính năng tự động song song hóa/hóa vector cho thư viện chuẩn.
- Cập nhật thuật toán
- Chính sách thực thi (execution policies)
- Thuật toán mới
Thuộc tính (Attributes)
C++17 thêm 3 thuộc tính mới:
[[maybe_unused]]- Chặn cảnh báo biến không dùng[[fallthrough]]- Chỉ ý fall-through có chủ đích trong switch[[nodiscard]]- Cảnh báo nếu giá trị trả về bị bỏ qua
Đơn giản hóa code
C++17 thêm các tính năng đơn giản hóa:
- Khởi tạo trong
if/switch(init statement) - Biến inline (inline variables)
- Khai báo ràng buộc cấu trúc (structured binding declarations)
Các trình tìm kiếm (Searchers)
Cải tiến các trình tìm kiếm cũ:
boyer_moore_horspool_searcherdefault_searcherboyer_moore_searcher