🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 一.命名空间概述 1. **全局命名空间污染** 程序开发中经常需要引用库,若这些库中含有与程序中定义的全局对象同名,或不同库之间有同名的全局实体,则编译时会出现命名冲突。 2. **作用** 建立一些互相分隔的作用域,把一些全局实体分隔开来,以免产生名字冲突。 3. **每个命名空间都是一个作用域** 位于命名空间之外的代码访问命名空间中的成员必须指明所用的命名空间的名字。 ## 二.命名空间定义 1. 定义一个命名空间 ```c++ namespace NAME {//名字是独一无二的 //可以放入任何声明 //code here }//后面没有分号 ``` >命名空间的定义可以非连续,甚至跨越不同的程序文本文件,这样可以头文件定义接口,源代码文件定义实现。 >命名空间支持嵌套。 ```c++ namespace name1 {//名字是独一无二的 namespace name2 { //code here } //code here }//后面没有分号 ``` 2. 命名空间成员的定义 + 在命名空间内,使用命名空间中定义的成员的名字无需前缀。 ```c++ namespace myns { class Student { public: int id; int score; }; Student max(Student stu1,Student stu2) { return stu1.score > stu2.score ? stu1 : stu2; } } ``` + 在命名空间外部定义成员之前需要在命名空间中声明过。成员的名字必须被外围命名空间名限定修饰。 + 若返回值是命名空间内定义的成员,则需要指明命名空间的名字。这是因为返回类型不在函数定义的域内。 ```c++ namespace myns { class Student { public: int id; int score; }; Student max(Student stu1,Student stu2); } myns::Student myns::max(Student stu1,Student stu2) { return stu1.score > stu2.score ? stu1 : stu2; } ``` 3. 访问命名空间成员 命名空间成员的声明被隐藏在其命名空间中,如需访问,需要使用域操作符`::`。 ```c++ std::cout<<20; ``` ## 三.using 1. 使用命名空间 ```c++ using namespace 命名空间名称; ``` 2. 使用命名空间的成员 ```c++ using 命名空间名称::成员名; ```