<返回更多

C++命名空间namespace的理解

2020-07-05    
加入收藏

 

 

C语言定义了3个层次的作用域:文件、函数和复合语句。

C++ 引入了类的作用域,类是在文件内的。

在不同的作用域中,可以定义相同名字的变量,互不干扰,编译器能够区别它们。

1、命名空间的概念

C语言中,只有一个全局作用域,所有全局标识符共享一个作用域,因此绝对不能重名。

但随着系统越来越复杂,通常不会仅由一个人来开发,不同的人开发同一个系统,不可避免地会出现变量或函数的命名冲突,当将所有人的代码结合到一起时,就会因为变量或函数重名,导致编译失败。

因此,C++提出了命名空间的概念:

  • 命名空间将全局作用域分成不同的部分;
  • 不同命名空间的标识符可以同名,不会发生冲突;
  • 命名空间可以嵌套。
namespace Name1
{
  namespace Name2
  {
    /*...*/
  }
    /*...*/
}

全局作用域也叫默认命名空间。

2、举例说明

比如现在有一个小学,学校里有六个年级,每个年级有三个班级。

现在一位老人来这个学校找到校长,要找一位叫张三的学生,感谢他在公共汽车上给自己让座。

现在校长(编译器)要找张三,但学校里有很多叫张三的人,怎么确定是哪个张三呢?

这时如果知道张三是哪个年纪,哪个班级,那么很快就能确定是谁。

假设是三年级二班的张三,那么这个三年级二班就是命名空间。

namespace grade
{
  namespace class
  {
    student zhang_san;
  }
}

C++的命名空间,就是一种为了避免命名冲突的机制。

C++命名空间namespace的理解

 

3、使用方式

C++的命名空间,有两种使用方式:

  • 导入整个命名空间:using namespace name;
  • 只导入命名空间中的某个变量:using name::variable
// 导入整个std命名空间到当前作用域
using namespace std;

// 只导入cout到当前作用域
using std::cout;
C++命名空间namespace的理解

 

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>