c++之命名空间(namespace)
Posted better,faster
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++之命名空间(namespace)相关的知识,希望对你有一定的参考价值。
目录
3.1、使用(using namespace 命名空间名称) 直接全部展开到全局
3.2、使用(命名空间名称 ::要使用的变量名/函数名/类名)在访问时,指定命名空间
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)的主要内容,如果未能解决你的问题,请参考以下文章