Menu

C++ là gì? Ngôn ngữ, tốc độ và nơi C++ được dùng

C++ thực sự là gì, vì sao nó biên dịch thẳng ra mã máy gốc, và những loại phần mềm hiệu năng cao được xây dựng bằng C++.

Trang này có trình soạn thảo chạy trực tiếp. Sửa, chạy và xem đầu ra ngay lập tức.

C++ trong một câu

C++ là ngôn ngữ lập trình kiểu tĩnh, biên dịch, chuyển mã nguồn của bạn trực tiếp thành mã máy gốc (native machine code). Chính lựa chọn thiết kế đó, không trình thông dịch, không máy ảo đứng giữa chương trình và CPU, là lý do C++ nằm trong số những ngôn ngữ nhanh nhất mà bạn có thể viết, và vì sao nó là nền tảng của những phần mềm tuyệt đối không được chậm.

Đây là chương trình đầu tiên không thể thiếu. Chạy nó ngay tại đây:

Ở đây có nhiều cấu trúc hơn so với một ngôn ngữ kịch bản, và điều đó là có chủ đích: C++ cho bạn khả năng kiểm soát chính xác, đổi lại bạn phải viết mọi thứ thật tường minh. Chúng ta sẽ giải thích từng phần trong vài trang tiếp theo.

Vì sao C++ nhanh

Phần lớn ngôn ngữ kịch bản chạy code qua một trình thông dịch hoặc máy ảo, đọc và thực thi từng lệnh lúc chạy. C++ bỏ qua tất cả những điều đó:

  1. Một trình biên dịch (như g++ hoặc clang++) đọc mã nguồn .cpp của bạn và dịch nó thành lệnh máy cho một bộ xử lý và hệ điều hành cụ thể.
  2. Kết quả là một tệp thực thi độc lập mà CPU chạy trực tiếp: không có gì đứng giữa code của bạn và phần cứng.

Vì không có bước dịch nào diễn ra trong lúc chương trình chạy, chương trình C++ khởi động tức thì và chạy hết tốc độ của bộ xử lý. Bạn cũng có khả năng kiểm soát chi tiết bộ nhớ và phần cứng, điều mà các ngôn ngữ cấp cao hơn cố ý che giấu.

Cái giá phải trả: mã máy đó được tạo cho một nền tảng duy nhất. Một tệp thực thi biên dịch trên Windows sẽ không chạy trên Mac; bạn phải biên dịch lại mã nguồn cho từng nền tảng đích. (Ngược lại, Java biên dịch ra bytecode di động, chạy được trên mọi JVM.)

Kiểu tĩnh và đa mô hình

Hai đặc điểm định hình cách code C++ trông và vận hành.

Kiểu tĩnh (statically typed) nghĩa là mọi biến đều có kiểu được biết từ lúc biên dịch, và trình biên dịch kiểm tra kiểu trước khi chương trình chạy:

count là một int suốt vòng đời của nó; cố lưu "hello" vào đó sẽ không biên dịch được. Điều này bắt sớm cả một nhóm lỗi, đổi lại bạn phải gõ nhiều hơn lúc đầu.

Đa mô hình (multi-paradigm) nghĩa là C++ không ép bạn theo một phong cách. Bạn có thể viết code thủ tục thuần, tổ chức logic thành các lớp (hướng đối tượng), hoặc dùng template cho code generic, tái sử dụng được. Phần lớn chương trình thực tế kết hợp cả ba. Sự linh hoạt này rất mạnh, nhưng cũng có nghĩa C++ có rất nhiều thứ cần học; chúng ta sẽ đi từng khái niệm một.

C++ dùng để làm gì

C++ xuất hiện ở bất cứ đâu mà hiệu năng và khả năng kiểm soát là yêu cầu bắt buộc:

  • Game engine: Unreal Engine, phần lõi của Unity và phần lớn code game AAA.
  • Phần mềm hệ thống: hệ điều hành, driver thiết bị và các trình duyệt như Chrome, Firefox.
  • Dịch vụ hiệu năng cao: cơ sở dữ liệu, hệ thống giao dịch tài chính và hạ tầng tìm kiếm, nơi từng micro giây đều quan trọng.
  • Hệ thống nhúng và phần cứng: firmware cho ô tô, drone, thiết bị y tế và IoT.

Nếu một phần mềm phải chạy nhanh, gói gọn trong bộ nhớ hạn hẹp hoặc giao tiếp trực tiếp với phần cứng, nhiều khả năng nó được viết bằng C++.

C++ không phải C (nhưng bắt nguồn từ C)

C++ phát triển từ C vào những năm 1980 với tên gọi "C có lớp" (C with classes), và đến nay phần lớn vẫn là tập cha của C: rất nhiều code C hợp lệ biên dịch được như C++. Nhưng từ đó đến nay, ngôn ngữ đã phát triển vượt bậc.

C++ bổ sung lập trình hướng đối tượng, template cho code generic, tham chiếu, ngoại lệ và một thư viện chuẩn phong phú với đủ loại công cụ dựng sẵn. Đoạn code dưới đây dùng một trong số đó, vector: một mảng có thể thay đổi kích thước và tự quản lý bộ nhớ, thứ mà trong C bạn sẽ phải tự xây dựng bằng tay:

C++ hiện đại (các chuẩn C++11, C++17 và C++20) dựa nhiều vào những công cụ như thế để khiến ngôn ngữ an toàn hơn và diễn đạt tốt hơn so với gốc C của nó. Một lỗi hay gặp của người mới là viết C++ theo phong cách C, quản lý bộ nhớ thủ công và dùng mảng thô khắp nơi, trong khi thư viện chuẩn đã giải quyết sẵn vấn đề cho bạn. Xuyên suốt bộ tài liệu này, chúng ta sẽ ưu tiên phong cách hiện đại.

Câu hỏi thường gặp

C++ dùng để làm gì?

C++ là nền tảng của những phần mềm cần tốc độ và khả năng kiểm soát: game engine (Unreal, phần lõi của Unity), hệ điều hành, trình duyệt (Chrome, Firefox), cơ sở dữ liệu, hệ thống giao dịch tài chính và thiết bị nhúng. Thế mạnh của nó là chạy sát phần cứng mà vẫn có các tính năng cấp cao như lớp, template và thư viện chuẩn.

C++ là ngôn ngữ biên dịch hay thông dịch?

C++ là ngôn ngữ biên dịch. Một trình biên dịch như g++ hoặc clang++ dịch mã nguồn của bạn trực tiếp thành mã máy gốc cho một CPU và hệ điều hành cụ thể, tạo ra một tệp thực thi độc lập. Không có trình thông dịch hay máy ảo nào đứng giữa chương trình và bộ xử lý, đó là lý do C++ chạy rất nhanh.

C và C++ khác nhau thế nào?

C++ khởi đầu là "C có lớp" và phần lớn là tập cha của C, nên đa số code C đều biên dịch được như C++. Những bổ sung lớn là lập trình hướng đối tượng (lớp và kế thừa), template, thư viện chuẩn (các container như vector và map), tham chiếu, ngoại lệ, cùng nhiều tính năng an toàn và tiện lợi mà C không có.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu