namespace giống như thêm họ vô cho tên biến vậy đó. cin là biến thuộc họ std, cout cũng là biến thuộc họ là std, v.v… Khi xài cin/cout thì phải gọi đầy đủ cả tên lẫn họ: std::cin
, std::cout
.
using namespace std;
là để chỉ cần gọi tên khỏi cần gọi họ.
đương nhiên là làm vậy thì có thể bị trùng tên: vd trong lớp có 2 bạn tên Nam, 1 bạn là Nguyễn::Nam
, 1 bạn Trần::Nam
thì nếu bạn using namespace Nguyễn
và using namespace Trần
thì khi bạn gọi Nam
thì ko rõ là đang gọi bạn nào.
namespace nguyen { int nam; }
namespace tran { int nam; }
using namespace nguyen;
using namespace tran;
int main()
{
nam = 0; //error: reference to ‘nam’ is ambiguous ("ambiguous" nghĩa là ko rõ ràng)
nguyen::nam = 0; //ok
tran::nam = 0; //ok
}
std
là họ “chuẩn” (standard) của C++. Thư viện chuẩn của C++ thì nhiều vô kể, bỏ cái họ này đi thì 1 nùi tên riêng bị mất họ, khiến bạn đặt tên biến dễ bị trùng hơn, nên hạn chế using namespace. Cứ gọi cả tên lẫn họ cho quen.