Trang tài liệu
Khóa học C++ nền tảng
Chương 14. Tiêu chuẩn C++
C++17

C++17

C++17, còn được gọi là C++1z, là phiên bản của ngôn ngữ lập trình C++ được xuất bản vào tháng 12 năm 2017. Phiên bản này được xây dựng dựa trên tiêu chuẩn trước đó, C++14, đồng thời bổ sung nhiều tính năng và cải tiến mới để cải thiện khả năng diễn đạt, hiệu suất và khả năng sử dụng của ngôn ngữ.

Các tính năng chính:

  • If-init-statement: Giới thiệu một cú pháp mới để viết các điều kiện với phạm vi bên trong các câu lệnh if và switch.
if(auto it = map.find(key); it != map.end())
{
    // Use it
}
  • Khai báo ràng buộc có cấu trúc: Đơn giản hóa quá trình giải nén một bộ, cặp hoặc các loại tổng hợp khác.
map<string, int> data;
auto [iter, success] = data.emplace("example", 42);
  • Biến inline: Bật từ khóa inlike cho các biến và cho phép định nghĩa duy nhất các biến tĩnh toàn cục và lớp trong file header.
inline int globalVar = 0;
  • Biểu thức fold: Giới thiệu biểu thức fold cho các mẫu biến đổi.
template <typename... Ts>
auto sum(Ts... ts)
{
    return (ts + ...);
}
  • Câu lệnh constexpr if: Cho phép trình biên dịch có điều kiện trong thời gian biên dịch.
template <typename T>
auto get_value(T t)
{
    if constexpr (std::is_pointer_v<T>)
    {
        return *t;
    }
    else
    {
        return t;
    }
}
  • Cải thiện biểu thức lambda: Cho phép lambda chụp một đối tượng mà không thay đổi kiểu hoặc hằng số của nó.
auto func = [x = std::move(obj)] { /* use x */ };
  • Thư viện hệ thống tệp tiêu chuẩn: std::filesystem như một cách được tiêu chuẩn hóa để thao tác với đường dẫn, thư mục và tệp.
  • Các bổ sung Thư viện tiêu chuẩn mới: <string_view> (tham chiếu chuỗi không sở hữu), (union phân biệt type-safe), (bao bọc xung quanh giá trị tùy chọn), (kiểu tổng type-safe) và <memory_resource> (thư viện dành cho bộ cấp phát đa hình).
  • Thuật toán song song: Thêm hỗ trợ để thực thi song song các thuật toán Thư viện chuẩn. Trên đây là một bản tóm tắt ngắn gọn về các tính năng chính của C++17; nó bao gồm nhiều tính năng hơn và cập nhật thư viện. Để biết danh sách đầy đủ, bạn có thể tham khảo danh sách đầy đủ các tính năng và thay đổi của C++17.