Tóm tắt các phiên bản C++

Estimated reading: 6 minutes 76 views

Chào bạn, lịch sử phát triển của C++ là một hành trình thú vị từ một bản mở rộng của C trở thành một ngôn ngữ hiện đại, mạnh mẽ và an toàn hơn.

Chúng ta có thể chia lịch sử C++ thành 3 kỷ nguyên chính: C++ Cổ điển (Classic C++), C++ Hiện đại (Modern C++), và Kỷ nguyên Mới (The Big Four Era).

Dưới đây là tóm tắt chi tiết qua từng phiên bản:


1. Giai đoạn Tiền Tiêu chuẩn (1979 – 1997)

  • Cha đẻ: Bjarne Stroustrup tại Bell Labs.

  • Tên gọi ban đầu: “C with Classes” (C có lớp).

  • Mục tiêu: Thêm tính năng Hướng đối tượng (OOP) của Simula vào tốc độ của C.

2. Kỷ nguyên Cổ điển (Classic C++)

C++98 (1998) – Tiêu chuẩn quốc tế đầu tiên

Đây là cột mốc chính thức biến C++ thành ngôn ngữ chuẩn ISO.

  • Đặc điểm chính: Định hình các tính năng cốt lõi mà chúng ta dùng đến tận đầu những năm 2000.

  • Tính năng nổi bật:

    • Templates (Khuôn mẫu).

    • Thư viện chuẩn STL (Standard Template Library) với vector, list, map

    • Exception Handling (Xử lý ngoại lệ try-catch).

    • Rất nhiều tính năng tương thích ngược với C.

C++03 (2003) – Bản sửa lỗi (Bug fix)

  • Đặc điểm: Không có tính năng mới đáng kể.

  • Mục tiêu: Sửa các lỗi trong tài liệu C++98 để đảm bảo các trình biên dịch hoạt động nhất quán hơn.

  • Thay đổi nhỏ: Value initialization (T()).


3. Kỷ nguyên Hiện đại (Modern C++) – Bước nhảy vọt

C++11 (2011) – Cuộc cách mạng lớn nhất

Đây là phiên bản thay đổi hoàn toàn cách viết C++. Nó sinh ra thuật ngữ “Modern C++”. Nó giải quyết sự rườm rà và quản lý bộ nhớ thủ công của quá khứ.

  • Tính năng “Sát thủ”:

    • auto: Tự động suy luận kiểu dữ liệu (giảm bớt việc viết dài dòng).

    • Smart Pointers: std::unique_ptr, std::shared_ptr (Giúp quản lý bộ nhớ tự động, hạn chế new/delete).

    • Move Semantics (R-value references &&): Tối ưu hóa hiệu năng cực lớn bằng cách “di chuyển” tài nguyên thay vì sao chép.

    • Lambda expressions: Hàm vô danh, viết code ngắn gọn ngay trong dòng.

    • nullptr: Thay thế NULL .

    • Range-based for loops: for (auto& x : list).

    • Multithreading: Hỗ trợ đa luồng chuẩn trong thư viện (std::thread, std::mutex).

C++14 (2014) – Hoàn thiện C++11

  • Đặc điểm: Một bản nâng cấp nhỏ để làm mượt mà những gì C++11 còn thiếu sót.

  • Tính năng nổi bật:

    • Generic Lambdas: auto trong tham số của lambda ([](auto x, auto y) { return x + y; }).

    • std::make_unique: Mảnh ghép còn thiếu của Smart Pointer.

    • Binary literals: Viết số nhị phân trực tiếp (0b1010).

    • Return type deduction: Hàm tự suy luận kiểu trả về mà không cần decltype.

C++17 (2017) – Dọn dẹp và Tiện ích

  • Đặc điểm: Thêm nhiều “đường cú pháp” (syntactic sugar) và thư viện mới.

  • Tính năng nổi bật:

    • Structured Bindings: Khai báo nhiều biến từ tuple/struct (auto [x, y] = pair;).

    • std::filesystem: Thư viện chuẩn để thao tác file/thư mục đa nền tảng.

    • std::optional, std::variant, std::any: Các kiểu dữ liệu an toàn hơn, thay thế cho việc dùng con trỏ null hoặc union cũ.

    • if constexpr: Câu lệnh if được xử lý ngay lúc biên dịch (cực mạnh cho Template metaprogramming).

    • if (init; condition): Khai báo biến ngay trong if.


4. Kỷ nguyên Mới (The Big Four Era)

C++20 (2020) – Cuộc cách mạng lần thứ 2

Tầm vóc thay đổi của C++20 được so sánh ngang ngửa với C++11. Nó giới thiệu “The Big Four” (4 tính năng khổng lồ).

  • 4 Tính năng khổng lồ:

    1. Modules (import): Thay thế cơ chế #include cổ lỗ sĩ. Giúp biên dịch nhanh hơn và quản lý code sạch hơn (giống Python/Java).

    2. Concepts: Ràng buộc cho Template. Giúp thông báo lỗi Template dễ đọc hơn và code an toàn hơn.

    3. Coroutines: Hỗ trợ lập trình bất đồng bộ (async/await) ngay trong ngôn ngữ.

    4. Ranges: Cách thao tác với danh sách/chuỗi theo phong cách Functional Programming (giống LINQ trong C#).

  • Khác: std::format (thay thế printf nhưng an toàn và nhanh như iostream).

C++23 (2023) – Hoàn thiện C++20

  • Đặc điểm: Bổ sung những gì C++20 chưa kịp làm xong (do ảnh hưởng đại dịch) và nâng cấp thư viện.

  • Tính năng nổi bật:

    • std::print: Cuối cùng cũng có hàm in ấn hiện đại, nhanh và dễ dùng thay thế coutprintf.

    • Explicit Object Parameter (this auto): Giúp viết code Deduplicating (tránh lặp code) cho các hàm constnon-const.

    • import std: Module chuẩn hóa toàn bộ thư viện STL.


Tóm tắt xu hướng thay đổi

  1. An toàn hơn: Từ con trỏ thô (*) sang Smart Pointers, từ NULL sang nullptr.

  2. Gọn gàng hơn: Từ khai báo kiểu tường minh dài dòng sang auto, structured bindings.

  3. Hiệu năng cao hơn: Move semantics, constexpr (tính toán lúc biên dịch).

  4. Hiện đại hóa: Modules thay thế Header files, Ranges thay thế vòng lặp truyền thống.

Leave a Comment

Chia sẻ:

Tóm tắt các phiên bản C++

Or copy link

CONTENTS