概念
命名空间就相当于一个作用域、上下文、一个范围,可以由用户自己命名,用来区分不同库中相同的函数名、类名、变量名等,c++中存在大量的变量、函数和类名,如果把他们放到一个全局命名空间中,会导致很多名称冲突。有了命名空间就可以在不同的命名空间中使用相同的名字,而不会出现名称冲突。
名称冲突的情况
- 自定义函数名与标准库函数名重名
- 程序中使用的名字与第三方库中使用的名字重名
- 同一项目不同模块中名字冲突
命名空间对于声明于其中的名字都进行了本地化
定义命名空间
命名空间的一些作用就是建立一些相互分隔的作用域,把一些全局实体分隔开来,以免产生名称冲突。
namespace 命名空间名 {
声明;
/*
变量(可以带有初始化)以及常量
函数(可以是定义或者声明)
结构体
类
模板
命名空间(在一个命名空间中又定义一个命名空间,即嵌套命名空间)
*/
}
命名空间中成员的使用
一般方法:命名空间::命名空间成员名
简化方法:
- 命名空间别名:namespace SD = Student; //SD等同Student
- using 命名空间成员名:using st::Student; //Student等同于st::Student
- using namespace 命名空间名
namespace person {
class Student {
};
}
namespace office {
class Table {
};
}
int main() {
person::Student s1;
office::Table t1;
return 0;
}