c++之命名空间(namespace)

Posted better,faster

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++之命名空间(namespace)相关的知识,希望对你有一定的参考价值。

目录

1、什么是命名空间

2、命名空间的定义

3、命名空间的使用

3.1、使用(using   namespace  命名空间名称)   直接全部展开到全局

3.2、使用(命名空间名称  ::要使用的变量名/函数名/类名)在访问时,指定命名空间

3.3、折中第一种和第二种方法,将比较常用的展开


1、什么是命名空间

在c/c++中,一个项目中会有大量的变量、函数、类,在我们不加以规定时,如果有两个变量需要使用相同的变量名,编译器将因为无法识别而报错,而命名空间就是为了解决这个问题,使用命名空间将它们本地化。

简单点来说,就是你们学校有两个同学叫小明时,为了区分,一个是放在你们班的小明,另一个是放在隔壁的班小明。


2、命名空间的定义

定义命名空间的关键字是namespace

基本定义方式:namespare   变量名      

namespace A        //A是命名空间的名字


    //命名空间里面可以定义变量,也可以定义函数
    int a;
    double b;
    int Add(int a,int b)
    
        return a+b;
    

除了上面的基本定义方式外,还有两种“花活”

1、命名空间可以嵌套定义

//1、命名空间可以嵌套定义
namespace A

	int a;
	namespace B
	
		int Add(int a, int b)
		
			return a + b;
		
	

2、允许定义相同的命名空间名,因为编译器最后会将它们合并为同一命名空间

namespace A

	int x;

namespace A

	int Add(int a, int b)
	
		return a + b;
	



//上面的命名空间也就等同于
namespace A

	int a;
	int Add(int a, int b)
	
		return a + b;
	

3、命名空间的使用

命名空间有三种使用方法:

3.1、使用(using   namespace  命名空间名称)   直接全部展开到全局

例如我们经常看到的:using namespace std;    //std是包含c++标准库的命名空间

这种方式使用的优缺点如下:

        优点:用起来方便。

         缺点:把自己的定义暴露出去了,在定义与库中名称相同的时候,就会导致命名污染

3.2、使用(命名空间名称  ::要使用的变量名/函数名/类名)在访问时,指定命名空间

namespace A

	int a;
	int Add(int a, int b)
	
		return a + b;
	

int main()

	A::a = 10; //命名空间名称  作用域限定符
	return 0;

这种方式使用的优缺点如下:

        优点:不存在命名污染。

        缺点:用起来麻烦,每次的使用都得去指定命名空间

3.3、折中第一种和第二种方法,将比较常用的展开

using   命名空间名称 :: 需要展开的变量名/函数名

namespace A

	int a;
	int Add(int a, int b)
	
		return a + b;
	

using A::a;   //展开命名空间A中的变量a
int main()

	a = 10;
	return 0;

以上是关于c++之命名空间(namespace)的主要内容,如果未能解决你的问题,请参考以下文章

c++之命名空间(namespace)

C++入门之命名空间

C++ 命名空间 (namespace)

初步认识c++之命名空间详解(千字长文带你刨析你命名空间的细节)

小白学习C++ 教程十三C++命名空间namespace

C++命名空间(namespace)