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++ Primer 5th笔记(chap 18 大型程序工具)内联命名空间 (inline namespace)

02C++namespace命名空间

C++ 命名空间 (namespace)

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