目录
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; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)