C++中,局部变量可以和全局变量重名吗?
2010-10-18 10:53
232 查看
这是一个作用域的问题。一个声明将一个名字引进一个作用域;局部变量(通常在函数中定义)的作用域是从声明的那一点开始,直到这个声明所在的块结束为止(一个块就是由{}围起来的一段代码)。全局变量(在所有函数、类、命名空间之外定义)的作用域从声明的那一点开始,直到这个声明所在的文件的结束。与全局变量重名的局部变量可以屏蔽全局变量,如果想在块内使用全局变量需要通过作用域解析运算符::引用。 见下例:
//global_local.cpp
#include <iostream>
using namespace std;
int x ; //定义一个全局变量x
int main()
{
int x ; //屏蔽全局变量x
cout<< "Global x Initial value = "<< ::x << endl;
cout<< "Local x Initial value = "<< x << endl;
x = 5; //对局部变量x赋值
::x = 6; //通过作用域解析运算符::引用全局变量x,并且改变其值
cout<< " After assignment Global x = " << ::x << endl;
cout<< "After assignment Local x = " << x <<endl;
return 0;
}
上述例子输出结果为:
Global x Initial value = 0
Local x Initial value = 11239412
After assignment Global x = 6
After assignment Local x = 5
从上面的例子还可以看出,如果没有显示初始化,那么全局变量、静态局部变量等静态对象会被自动初始化为适当类型的0,而局部对象(也称为自动对象)和在自由存储区里建立的对象(动态对象或者堆对象)将不会被初始化。
//global_local.cpp
#include <iostream>
using namespace std;
int x ; //定义一个全局变量x
int main()
{
int x ; //屏蔽全局变量x
cout<< "Global x Initial value = "<< ::x << endl;
cout<< "Local x Initial value = "<< x << endl;
x = 5; //对局部变量x赋值
::x = 6; //通过作用域解析运算符::引用全局变量x,并且改变其值
cout<< " After assignment Global x = " << ::x << endl;
cout<< "After assignment Local x = " << x <<endl;
return 0;
}
上述例子输出结果为:
Global x Initial value = 0
Local x Initial value = 11239412
After assignment Global x = 6
After assignment Local x = 5
从上面的例子还可以看出,如果没有显示初始化,那么全局变量、静态局部变量等静态对象会被自动初始化为适当类型的0,而局部对象(也称为自动对象)和在自由存储区里建立的对象(动态对象或者堆对象)将不会被初始化。
相关文章推荐
- C++中局部变量可以和全局变量重名吗?
- C++中局部变量可以和全局变量重名
- C++中局部变量可以和全局变量重名吗?
- C++中局部变量可以和全局变量重名吗?
- c++中的局部变量和全局变量重名时取值问题
- 【转】c++中的局部变量和全局变量重名时取值问题
- C/C++全局变量和局部变量重名问题
- java中全局变量是否可以和局部变量重名?(一个菜鸟的积累)
- 变量——全局变量和局部变量是否可以重名?你是否在这样做?
- 全局变量和局部变量是否可以重名(笔试题)
- C|C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
- 局部变量能否和全局变量重名
- C++反汇编九(全局变量与局部变量)
- C++ 全局变量和局部变量
- C|C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
- C++ 全局变量、局部变量、静态全局变量、静态局部变量的区别
- C|C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
- 为什么内部类使用的局部变量必须是final而全局变量可以是no-final
- c语言全局变量与局部变量(当变量重名时)的使用情况
- 局部变量能否和全局变量重名