我们知道对于变量访问有以下几点规则:
1.先在本局部域中找
2.如果局部域没有,那么会在全局域中查找
3.如果指定了,那么就去指定域中找
注意:指定域本质上在全局域中
那么我们现在再讲一下各大域划分:
大概分为以下几种:
局部域/全局域/命名空间域/类域
请看下面代码:
#include <stdio.h>
int rand = 1;
int main()
{
int rand = 0;
printf("%d", rand);
return 0;
}
我们都知道,上述代码结果为:0
那么我如果想问我想访问全局变量呢?
#include <stdio.h>
int rand = 1;
int main()
{
int rand = 0;
printf("%d", ::rand);
return 0;
}
那么我们就可以这样写,::表示域作用限定符
该作用符表示如果左边无限定域,那么就表示访问全局域
?
那么我们现在就来学习指定域吧!
函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存
在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,
以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的
?
那么我们现在就试试namespace吧~!
namespace cx
{
int rand = 1;
}
namespace cx
{
int rand = 1;
}
性质:????????
1.namespace命名可以重名,会在编译时进行合并
2.namespace命名内部的变量是不能重名的
3.命名空间中可以定义变量/函数/类型
4.命名空间可以嵌套
命名namespace的使用规则:
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}
中即为命名空间的成员
?
现在我们知道如何命名空间了,那么我们如何使用命名空间呢?
主要分为以下几种使用方法:
1.加命名名称空间和作用域限定符
#include <stdio.h>
namespace cx
{
int rand = 1;
}
int main()
{
printf("%d", cx::rand);
return 0;
}
但是在平常练习中,这样写需要大量的功夫,所以我们有更简单的写法。
2.使用using将命名空间中某个成员引入
namespace cx
{
int rand = 1;
}
using namespace cx;
int main()
{
printf("%d\n", cx::rand);
printf("%d\n", rand);
return 0;
}
但是注意这种写法,需要放在命名空间后面!!!
3.使用using namespace 命名空间名称 引入
using namespce N;
这种写法通常简单书写所用,总之,第二种在平常最为常用。
最后,寒假一起加油,我们寒假死战C++,努力学到会一点点!