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

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

时间:2018-01-27 23:14:37      阅读:383      评论:0      收藏:0      [点我收藏+]

标签:assign   section   定义   问题   lob   需要   文件   std   通过   

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

 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++中局部变量是否可以和全局变量重名

标签:assign   section   定义   问题   lob   需要   文件   std   通过   

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

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