变量的范围 namespace
变量的范围
- 范围
变量有 菊部变量 和 全局变量之分, local variable 和 global variable
一般在函数体外定义的变量是全局的,函数体内定义的变量只能在函数内使用
注意:在同一个范围内,同一个变量名不能定义两次
在不同的空间范围内可以定义同样名字的变量,这时候他们的作用范围也是不同的
- NameSpace
为了避免命名冲突(因为如果大家都是全局变量的话,程序一多,难免会有冲突,比如说都int x;
作为计数器)
Namespaces
可以把变量约束在不同的命名空间里,通过调用不同的命名空间来指定某个变量,类似于“三年级一班的小明”、“三年级二班的小明”等等
在命名空间内部可以直接使用变量a和b,在外部想引用空间内的对象的话需要使用 “范围操作符” 双冒号 ::
上面的例子中,如果想在外面使用a和b,myNamespace::a
,myNamespace::b
命名空间可以有效的避免命名冲突,如下图有两个value()
函数,pi
虽然定义在bar
内部,但是也可以在main
里面调用这个量
命名空间可以分开写,下面的foo
空间分开两次定义了a,c 效果和一下定义a和c是一样的,这只是简单的分行写,甚至还可以分开到不同的文件或者源代码里去定义。
- using
上面说到了命名空间,我们在引用空间内部的对象的时候,格式是 空间标识符::对象
通过using
我们可以省略前面的空间名字,就像之前的std::cout
简写成cout
一样,前提是using namgspace std;
下面看两种using
方式
1. 直接把对象using出来直接用,这里是using
2.把命名空间引出来,using namespace,他里面的所有成员可以直接用,但是其他空间里的同名变量还是得按标准来。这里是using namespace
这个例子如果再using namespace second;
就会报错了,两个空间里都有x y,编译器无法确定用哪个空间里的。
using namespace具有自己的使用范围,在全局using
和在代码片里using
,各自的范围就是全局和对应的代码范围。