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

C++11 và C++14

C++11: Chuẩn C++11, còn được gọi là C++0x, được phát hành chính thức vào tháng 9 năm 2011. Nó giới thiệu một số tính năng và cải tiến ngôn ngữ mới, bao gồm:

  • Tự động: Cho phép trình biên dịch suy ra loại biến dựa trên biểu thức khởi tạo của nó.
    auto integer = 42; // số nguyên có kiểu int
    auto floating = 3.14; // số thực là loại kép
  • Vòng lặp dựa trên phạm vi: Cung cấp ngữ nghĩa giống như foreach để lặp qua vùng chứa hoặc mảng.
    std::vector<int> numbers {1, 2, 3, 4};
    for (int number : numbers) {
        std::cout << number << std::endl;
    }
  • Hàm Lambda: Các hàm ẩn danh cho phép tạo các đối tượng hàm dễ dàng hơn.
    auto add = [](int a, int b) -> int { return a + b; };
    int sum = add(42, 13); // tổng bằng 55
  • nullptr: Một từ khóa mới để biểu thị các con trỏ null, an toàn hơn so với sử dụng chữ '0' hoặc "NULL".
    int *ptr = nullptr;
  • Thư viện hỗ trợ luồng: Cung cấp một cách chuẩn để làm việc với các luồng và đồng bộ hóa truy cập dữ liệu giữa các luồng.
    std::thread t([]() { std::cout << "Hello from another thread\n"; });
    t.join();

C++14: Chuẩn C++14 được phát hành chính thức vào tháng 12 năm 2014 dưới dạng một phần mở rộng nhỏ so với C++11, tập trung nhiều hơn vào các tính năng ngôn ngữ tinh chỉnh và khắc phục sự cố. Một số tính năng mới được giới thiệu:

  • Lambda chung: Cho phép khai báo các tham số hàm lambda với trình giữ chỗ loại 'tự động'.
    auto add = [](auto a, auto b) { return a + b; };
    auto sum_i = add(42, 13); // Vẫn hoạt động với số nguyên
    auto sum_f = add(3.14, 2.72); // Bây giờ cũng hoạt động với số kép
  • Chữ nhị phân: Cho phép bạn nhập số nguyên dưới dạng chữ nhị phân để dễ đọc hơn.
    int b = 0b110101; // Giá trị thập phân là 53
  • decltype(auto): Suy ra loại biến để khớp với loại của biểu thức mà nó được khởi tạo.
    auto func = [](auto a, auto b) { return a * b; };
    decltype(auto) result = func(5, 3.14); // decltype(auto) suy ra thành "số kép"
  • Mẫu biến: Cho phép bạn xác định các biến với tham số mẫu.
    template <typename T>
    constexpr T pi = T(3.1415926535897932385);
    float r = pi<float>; // Khởi tạo dưới dạng float
    double d = pi<double>; // Khởi tạo dưới dạng double