首页 > 编程语言 > 详细

C++中局部变量是否可以和全局变量重名

时间:2018-01-27 22:53:11      阅读:268      评论:0      收藏:0      [点我收藏+]

这是一个作用域的问题。一个声明将一个名字引进一个作用域;局部变量(通常在函数中定义)的作用域是从声明的那一点开始,直到这个声明所在的块结束为止(一个块就是由{}围起来的一段代码)。全局变量(在所有函数、类、命名空间之外定义)的作用域从声明的那一点开始,直到这个声明所在的文件的结束。与全局变量重名的局部变量可以屏蔽全局变量,如果想在块内使用全局变量需要通过作用域解析运算符::引用。 见下例:

 1 #include <iostream>
 2 using namespace std;
 3 int x ;   //定义一个全局变量x
 4 int main()
 5 {
 6     int x ; //屏蔽全局变量x
 7     cout<< "Global x Initial value = "<< ::x << endl;
 8     cout<< "Local x Initial value = "<< x << endl;
 9     x = 5;          //对局部变量x赋值
10     ::x = 6;      //通过作用域解析运算符::引用全局变量x,并且改变其值
11     cout<< " After assignment Global x = " << ::x << endl;
12     cout<< "After assignment Local x = " << x <<endl;
13     return 0;
14 }

上述例子输出结果为:

Global x Initial value = 0
Local x Initial value = 11239412
After assignment Global x = 6
After assignment Local x = 5

从上面的例子还可以看出,如果没有显示初始化,那么全局变量、静态局部变量等静态对象会被自动初始化为适当类型的0,而局部对象(也称为自动对象)和在自由存储区里建立的对象(动态对象或者堆对象)将不会被初始化。

C++中局部变量是否可以和全局变量重名

原文:https://www.cnblogs.com/yulinhanhonor/p/8367363.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!