目录
1.为什么有命名空间?
//命名空间关键字:namespace
在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存 在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化, 以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。
#include <stdio.h>
#include <stdlib.h>
int rand = 10;
// C语言没办法解决类似这样的命名冲突问题,所以C++提出了namespace来解决
int main()
{
printf("%d\n", rand);
return 0;
}
// 编译后后报错:error C2365: “rand”: 重定义;以前的定义是“函数”
2.namespace玩法:
1..定义
namespace 自己想要的名字 {
//...
// 命名空间中可以定义变量/函数/类型
}
//嵌套
namespace abab {
//...
namespace acac {
//...
}
}
namespace abab {
//...
// 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
// ps:一个工程中的test.h和上面test.cpp中两个N1会被合并成一个
}
//嵌套命名空间名字相同会报错
// 属于给自己划了一块空间,命上了名,程序结束前一直存在,每当你需要命名空间里的代码,使用它即可,
2..使用
命名空间的代码是不能直接访问的,
1...单个使用
命名空间的名字 + 作用域限定符(::) //两个冒号就是作用域限定符
2...引用成员,相当于暴露在全局
使用using将命名空间中某个成员引入
3...引用整个命名空间
使用using namespace + 命名空间名称 引入
当出现以下情况b是多少?
输出的是1;
为何?
编译器有默认查找顺序,就像C语言之中的全局变量的局部变量名字相同时先搜索局部一样,
顺序:
a, 局部
b, 全局
c, 引用了的命名空间
//ps,单个引用,好似把命名空间的引用单独暴露在全局,会和全局变量起冲突,
思考:
代码一,包含了iostream,io流这个头文件
代码二,是命名空间的引用,命名空间的名字是std,
如果本文章对你有用,请点点收藏支持一下,万分感谢!!