码迷,mamicode.com
首页 > 编程语言 > 详细

C++变量的可见性(转)

时间:2015-04-02 20:46:37      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:

我们之前介绍过,在某一个函数中,不应该有两个名字相同的变量。可是,我们拿下面这段程序代码(程序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的作用域结束

然而,当两张纸处于同一个层次,显然两者就不可能发生遮盖了。所以,如果我们在同一个层次中声明两个名字相同的变量,那么他们的作用域就不是遮盖,而是冲突了。

因此,在某个函数的同一语法层次内不能声明多个名字相同的变量。

C++变量的可见性(转)

标签:

原文地址:http://www.cnblogs.com/QinMoon/p/4388194.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!