………………………………………………………………………………
命名空间:
在 C语言环境中,当变量或函数发生冲突的时候,编译器会报错。在一些大工程中不同的板块往往由不同的人员进行编写,合并到一块时可能会出现名字冲突,因此C++在C的基础上引入了命名空间的概念,生成出一块块独立的作用域来避免冲突。
局部变量和全局变量:
为了更好地讲述命名空间,先来复习一下局部变量和全局变量
int a=0;
void test(){
int a=1;
printf("%d",a);
}
int main(){
test();
}
运行上面的代码,输出结果时1
原因是因为a=0属于全局域,而a=1属于局部域,在调用的时候编译器会先选择去局部域寻找目标,再去全局域寻找(局部优先原则)
那么如果我不想要输出1,想要直接去打印全局域中0,要怎么做呢?
C++中提供了一种操作符号 ::,用来指定被访问的作用域,左值为作用域,右值为变量名。当左值为空是,默认从全局中访问。
int a=0;
void test(){
int a=1;
printf("%d",::a); //输出0
}
int main(){
test();
}
namespace关键字:
C++中提供namespace关键字方便程序员自定义作用域,如图所示
namespace N
{
int a=0;
int b=0;
} //不用加分号
namespace M
{
int a=0;
int b=0;
}
定义了一个名为N的作用域和一个名为M的作用,它们分别放有各自的局部变量a,b,虽然变量名相同,但由于作用域不同,并不会发生冲突
不仅仅是可以指定变量的作用域,也可以指定函数的作用域,此外命名空间是可以嵌套使用的,如图所示↓
namespace N
{
double add(int a, int b) {
return a + b;
}
}
namespace M
{
float add(int a, int b) {
x,y
return a + b;
}
namespace K
{
int add(int a, int b) {