+2

Tác dụng của using namespace std trong C++ là gì?

Đây chắc hẳn là một trong những câu hỏi phổ biến của nhiều bạn khi mới học lập trình C++

Nếu dịch word-by-word thì "name" là "tên", "space" là "không gian". Suy ra, "namespace" tức là "không gian tên". Và using namespace std tức là “sử dụng không gian tên std” (std là viết tắt của “standard“)

Nhờ có câu lệnh này mà chương trình có thể hiểu các đối tượng như cin, cout đến từ namespace nào

Các namespace trong C++ sẽ giúp các đoạn code tách biệt lẫn nhau trong những "không gian" riêng

Cùng xem ví dụ dưới đây:

image.png

Trong đoạn code này mình tự khai báo ra một namespace riêng có tên là MyNamespace.

Trong namespace này mình lại khai báo 2 class có trùng tên là Person.

Khi mình sử dụng class Person để khởi tạo đối tượng trong hàm main(), chương trình ngay lập tức báo lỗi “Person” is ambiguous, tức là nó “mơ hồ” không hiểu phải sử dụng class Person ở trên hay Person ở dưới.

Từ đó chúng ta có thể kết luận: Trong cùng một namespace sẽ không được phép có 2 class có tên giống nhau

Để khắc phục lỗi này, mình có thể sửa tên class thứ hai thành Person2, để tránh trùng tên với class thứ nhất

Hoặc mình cũng có thể tạo thêm một namespace khác, và đưa 1 trong 2 class Person này sang namespace mới vừa tạo. Sau đó, mình sẽ chỉ định rằng muốn sử dụng class Person của namespace nào bằng toán tử :: Khi ấy,**** việc tồn tại 2 class cùng có tên là Person, nhưng nằm ở 2 namespace khác nhau, thì lại hoàn toàn hợp lệ****

image.png

Khi đi làm, các bạn cũng sẽ thấy các anh chị tiền bối sẽ hay sử dụng toán tử :: hơn là using namespace, để giúp tránh lỗi xung đột tên giữa các namespace với nhau

image.png

Ngoài ra, một namespace không nhất thiết chỉ xuất hiện trong 1 file, mà nó có thể nằm ở nhiều file riêng lẻ. Cậu có thể xem source code của các thư viện iostream, heap, deque, ... cũng sẽ thấy sẽ thấy sự xuất hiện của namespace std bao bọc lấy xung quanh đoạn code của các thư viện này. Điều này chỉ ra rằng: những hàm, biến, class, ... được khai báo bên trong đó đều thuộc về namespace std

iostream.png

stlheap.png

stldeque.png

Đó cũng là lý do tại sao khi include các thư viện này, các cậu chỉ cần using namespace std là có thể sử dụng được các biến, hàm, class, ... nằm trong tất cả những thư viện ấy

Hi vọng kiến thức này hữu ích với cậu. Hẹn gặp lại 👋


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.