Trang tài liệu
Khóa học C++ nền tảng
Chương 14. Tiêu chuẩn C++
C++ Chuẩn mới nhất: C++20

C++ Chuẩn mới nhất: C++20

C++20 là chuẩn mới nhất của ngôn ngữ lập trình C++, được xuất bản chính thức vào tháng 12 năm 2020. Tiêu chuẩn này giới thiệu nhiều tính năng, cải tiến và cải tiến mới so với các chuẩn trước đó. Dưới đây là tóm tắt ngắn gọn về một số tính năng chính trong C++20.

  • Khái niệm: Các khái niệm cung cấp một cách để chỉ định các ràng buộc đối với các tham số mẫu, đảm bảo rằng chúng đáp ứng một tập hợp các yêu cầu cụ thể. Điều này cho phép thông báo lỗi thời gian biên dịch tốt hơn và khả năng đọc mã code.

    Ví dụ:

    template<typename T>
    concept Printable = requires(T x) {
        {std::cout << x};
    };
     
    template<Printable T>
    void print(const T& x) {
        std::cout << x << '\n';
    }
  • Phạm vi: Phạm vi được xây dựng dựa trên khái niệm trình lặp và cung cấp một khung có thể sử dụng và kết hợp nhiều hơn để xử lý các chuỗi giá trị. Chúng đơn giản hóa cách các thuật toán có thể được áp dụng cho các tập hợp dữ liệu.

    Ví dụ:

    #include <iostream>
    #include <vector>
    #include <ranges>
     
    int main() {
        std::vector<int> numbers{1, 2, 3, 4, 5};
        auto even_view = numbers | std::views::filter([](int n) { return n % 2 == 0; });
     
        for (int n : even_view) {
            std::cout << n << ' ';
        }
    }
  • Coroutine: Coroutine cung cấp một cách để phân chia các hàm phức tạp, chạy dài thành các phần nhỏ hơn, dễ quản lý hơn, cho phép chúng bị treo và tiếp tục tại các điểm cụ thể.

    Ví dụ:

    #include <iostream>
    #include <coroutine>
     
    std::generator<int> generator() {
        for (int i = 0; i < 5; ++i)
            co_yield i;
    }
     
    int main() {
        for (int value : generator())
            std::cout << value << ' ';
    }
  • Lambdas với tham số mẫu: C++20 cho phép sử dụng auto làm tham số lambda, cho phép lambdas chung với tham số mẫu.

    Ví dụ:

    auto sum = [](auto a, auto b) {
        return a + b;
    };
     
    int res1 = sum(1, 2);           // int
    double res2 = sum(1.0, 2.0);    // double
  • Các cải tiến của constexpr: hỗ trợ constexpr được mở rộng với các tính năng bổ sung, chẳng hạn như phân bổ động constexpr, khối try-catch constexpr và lambdas constexpr.

    Ví dụ:

    struct Point {
        constexpr Point(int x, int y): x_{x}, y_{y} {}
        int x_, y_;
    };
     
    constexpr auto create_points() {
        Point points[3]{};
     
        for (int i = 0; i < 3; ++i) {
            points[i] = Point{i, i * i};
        }
     
        return points;
    }
     
    constexpr auto points = create_points();

Có nhiều tính năng khác trong C++20, chẳng hạn như cải tiến thư viện tiêu chuẩn mới, std::format, cải tiến lập trình thời gian biên dịch, v.v. Đây chỉ là một vài điểm nổi bật thể hiện tính linh hoạt và sức mạnh của tiêu chuẩn mới nhất của C++.