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

C++20

C++20 là tiêu chuẩn mới nhất của ngôn ngữ lập trình C++, mang lại những cải tiến đáng kể và các tính năng mới cho ngôn ngữ này. Phiên bản này nhằm tạo điều kiện thuận lợi cho các phương pháp phát triển phần mềm tốt hơn và cho phép các nhà phát triển viết mã code hiệu quả hơn, dễ đọc và dễ bảo trì hơn.

Dưới đây là một số tính năng chính được giới thiệu trong C++20:

Khái niệm

Các khái niệm là một cách để thực thi các yêu cầu cụ thể đối với các tham số mẫu, cho phép bạn viết mã code rõ ràng và dễ hiểu hơn. Chúng cải thiện các thông báo lỗi khi sử dụng mẫu và đảm bảo rằng các tham số mẫu đáp ứng các tiêu chí cụ thể.

template <typename T>
concept Addable = requires (T a, T b) {
    { a + b } -> std::same_as<T>;
};
 
template <Addable T>
T add(T a, T b) {
    return a + b;
}

Phạm vi

Phạm vi cung cấp một cách mới để làm việc với các chuỗi giá trị, nâng cao sức mạnh và tính biểu cảm của thuật toán Thư viện tiêu chuẩn. Các thuật toán dựa trên phạm vi giúp làm việc với các chuỗi dễ dàng và thuận tiện hơn.

#include <algorithm>
#include <iostream>
#include <ranges>
#include <vector>
 
int main() {
    std::vector<int> numbers = { 1, 2, 3, 4, 5 };
 
    auto even_numbers = numbers | std::views::filter([](int n) { return n % 2 == 0; });
 
    for (int n : even_numbers) {
        std::cout << n << ' ';
    }
}

Coroutine

Coroutines là một cách mới để viết mã code đồng thời và không đồng bộ với khả năng đọc được cải thiện. Chúng cho phép các hàm bị treo và tiếp tục, cho phép bạn viết mã không chặn, hiệu quả hơn.

#include <coroutine>
#include <iostream>
#include <future>
 
std::future<int> async_value(int value) {
    co_await std::chrono::seconds(1);
    co_return value * 2;
}
 
int main() {
    auto result = async_value(42);
    std::cout << "Result: " << result.get() << std::endl;
}

Từ khóa constexprconsteval

Cả constexpr và consteval đều liên quan đến đánh giá thời gian biên dịch. Các hàm được đánh dấu bằng constexpr có thể được thực thi tại thời điểm biên dịch hoặc thời gian chạy, trong khi các hàm được đánh dấu bằng consteval chỉ có thể được thực thi tại thời điểm biên dịch.

constexpr int add(int a, int b) {
    return a + b;
}
 
consteval int square(int x) {
    return x * x;
}
 
int main() {
    constexpr int result1 = add(3, 4);   // được đánh giá tại thời điểm biên dịch
    int result2 = add(5, 6);             // được đánh giá trong thời gian chạy
    constexpr int result3 = square(7);   // được đánh giá tại thời điểm biên dịch
}

Đây chỉ là một số điểm nổi bật của tiêu chuẩn C++20. Nó cũng bao gồm nhiều tính năng và cải tiến khác, như liên kết có cấu trúc, lambda cải tiến và các thành phần thư viện tiêu chuẩn mới. Nhìn chung, C++20 giúp các nhà phát triển viết mã code rõ ràng, hiệu quả và biểu cảm dễ dàng hơn.