当我们在阅读C++开发程序的代码的过程中,经常会看到这样的定义
using namespace std
这种定义有些人会觉得习以为常,但是这是一个关键,这是命名空间,标准库种的东西都放在std
首先一个问题是为什么存在命名空间?
当我们在定义变量的时候,会出现以下问题:
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
int rand = 0;
int main() {
printf("%d", rand);
return 0;
}
出现rand变量的不明确和重定义的情况,为了避免命名冲突或者是名字污染的情况出现,命名空间就是对标识符的名称进行本地化。如下代码段:
#include<iostream>
using namespace std;
//int rand = 0;
namespace sen {
int rand = 0;
}
int main() {
printf("%d",sen:: rand);
return 0;
}
这样就可以避免本地标识符与标准库内的标识符的冲突。
第二个问题是命名空间该如何去定义?
首先定义命名空间必须用到namespac 然后在跟上命名空间的名字,之后接着一对{},如下代码
namespace sen {
int rand = 0;
}
命名空间也是可以嵌套使用的,例如下面代码
namespace sen {
int rand = 0;
namespace mu {
int s = 1;
}
}
int main() {
printf("%d",sen:: rand);
printf("%d", sen::mu::s);
return 0;
}
其次是命名空间在同一个工程中允许存在多个相同名称的,编译器会将他们合并成一个命名空间。
第三个问题命名空间该如何去使用?
1.命名空间名称加作用限定符
2.使用using将命名空间中的某个成员引入
using sen::rand;
//int rand = 0;
namespace sen {
int rand = 0;
namespace mu {
int s = 1;
}
}
int main() {
printf("%d",rand);
printf("%d", sen::mu::s);
return 0;
}
3.使用using namespace命名空间名称引入
using namespace sen;
int main() {
printf("%d",sen::rand);
printf("%d", sen::mu::s);
return 0;
}