命名空间就是为了防止名字冲突而引入的一种机制。
(1) 系统中可以定义多个命名空间,每个命名空间都有自己的名字,不可以同名。
(2) 命名空间不影响内存布局。
(3) 我们可以把命名空间看成一个作用域。我们在这个命名空间里定义的函数跟另外一个命名空间里定义的函数,即便同名也互不影响。
(4) 命名空间的定义可以不连续,甚至可以写在多个文件中。
*
如果之前没有定义这个命名空间,那么 namespace 命名空间名 这种写法就相当于定义了一个新的命名空间。
*
如果之前已经定义了这个命名空间,那么 namespace 命名空间名 这种写法就相当于打开已经存在的命名空间并为其添加新成员的声明。
外界如何访问某个命名空间中的函数呢?
格式:命名空间名::实体名,其中 :: 叫作用域运算符。
#include <iostream> using namespace std; namespace qdu { int g_age; void func()
{ cout << "qdu::func()" << endl; } class Person { int m_age; int m_money; }; }
void func() { cout << "func()" << endl; } int main() { qdu::Person person; qdu::
g_age= 10; qdu::func(); // 输出qdu::func() func(); // 输出func() return 0; }
有个默认的全局命名空间,我们创建的命名空间默认都嵌套在它里面。
#include <iostream> using namespace std; namespace qdu { int g_age; void func()
{ cout << "qdu::func()" << endl; } class Person { int m_age; int m_money; }; }
void func() { cout << "func()" << endl; } int main() { using namespace qdu;
Person person; g_age = 10; qdu::func(); // 输出qdu::func() ::func(); // 输出func()
return 0; }