C++变量的可见性
来源:互联网 发布:张无忌萧峰 知乎 编辑:程序博客网 时间:2024/05/29 03:43
我们之前介绍过,在某一个函数中,不应该有两个名字相同的变量。可是,我们拿下面这段程序代码(程序11.1.3)去测试一下,发现居然在同一个函数中可以有两个名字相同的变量。这又是怎么回事呢?编译器又是如何辨别这两个名字相同的变量的呢?
#include "iostream.h"
int main()
{
int a=3,b=4;
{
int a=5,b=6;
{
char a='a',b='b';
cout <<a <<b <<endl;
}
cout <<a <<b <<endl;
}
cout <<a <<b <<endl;
return 0;
}
运行结果:
ab
56
34
我们已经说明,变量可以使用的范围是由变量的作用域决定。不同层次的变量的作用域,就好像大小不一的纸片。把它们堆叠起来,就会发生部分纸片被遮盖的情况。我们把这种变量作用域的遮盖情况称为变量的可见性(Visibility)。如下面的图11.1所示:
#include "iostream.h"
int main()
{
int a=3,b=4;//整型变量a=3、b=4的作用域开始
{
int a=5,b=6;//整型变量a=5、b=6的作用域开始,整型变量a=3、b=4不可见
{
char a='a',b='b';//字符型变量a='a'、b='b'作用域开始,整型变量a、b不可见
cout <<a <<b <<endl;//输出字符型变量,整型变量a、b不可见
}//字符型变量a='a'、b='b'作用域结束
cout <<a <<b <<endl;//输出整型变量a=5、b=6,整型变量a=3、b=4不可见
}//整型变量a=5、b=6的作用域结束
cout <<a <<b <<endl; //输出整型变量a=3、b=4
return 0;
}//整型变量a=3、b=4的作用域结束
然而,当两张纸处于同一个层次,显然两者就不可能发生遮盖了。所以,如果我们在同一个层次中声明两个名字相同的变量,那么他们的作用域就不是遮盖,而是冲突了。
因此,在某个函数的同一语法层次内不能声明多个名字相同的变量。
FROM: http://c.biancheng.net/cpp/biancheng/view/63.html
0 0
- InheritableThreadLocal变量的可见性
- C++变量的可见性
- 变量的生存期和可见性
- 趣谈Java变量的可见性问题
- 关于Java变量的可见性问题
- 变量的生存期与可见性
- Java Volatile 变量的可见性
- C/C++中变量的可见性与生命期区别的本质原因
- (C++Primer)for循环中定义的变量i的可见性
- C/C++中变量的可见性与生命期区别的本质原因
- C/C++中变量的可见性与生命期区别的本质原因
- 共享变量可见性
- 共享变量可见性
- ABAP变量的可见范围
- ABAP变量的可见范围
- ABAP变量的可见范围
- [Java 多线程] 变量可见性
- 变量可见性和Volatile
- 安装window操作系统
- Linux内存占用过高?非也
- 【深度反思】:环境影响人的非常重要的因素
- C++作用域
- Android WebView - 全面总结(概述、捕获url、js交互、小技巧、内存泄漏、缓存机制)
- C++变量的可见性
- 自定义ToggleButton
- 机器学习路线
- 设计网页时IE6中10个不得不注意的问题
- centos 7 菜鸟第一天 双启动
- java单例模式就有6种,你知道哪几种?!
- 链表:女生节快乐
- 编程思想的演变
- 开发人员面对产品经理的“为难” 得淡定