通过使用全局变量的函数访问在给定范围内被覆盖的变量
Access variable that was overwritten within given scope via function that uses global variables
我有一段代码:
#include <stdio.h>
// global variable definition
int x = 0;
void access_global(){
cout << "ACCESSING FROM access_global()" << endl;
if (x > 0){
cout << "LOCAL VARIABLE" << endl;
cout << x << endl;
}
else{
cout << "GLOBAL VARIABLE" << endl;
cout << x << endl;
}
}
int main(int, char*[])
{
// declare new variable in given scope with same name as global variable
int x = 1;
cout << "ACCESSING FROM main()" << endl;
if (x > 0){
cout << "LOCAL VARIABLE" << endl;
cout << x << endl;
}
else{
cout << "GLOBAL VARIABLE" << endl;
cout << x << endl;
}
access_global();
return 0;
}
它输出:
ACCESSING FROM main()
LOCAL VARIABLE
1
ACCESSING FROM access_global()
GLOBAL VARIABLE
0
为什么access_global()
不访问main()
作用域中的x
?是否可以修改access_global()
函数,使其显示main()
范围内的主要x
变量,如果未定义,则显示main()
之外定义的变量?如果不可能,你能解释一下原因吗?感谢
为什么
access_global()
没有访问main()
作用域中的x
?
因为main::x
不在access_global
的范围内。幸运的是,名称不仅仅"泄漏"到函数的作用域之外。全局x
是它能看到的唯一x
。
是否可以修改
access_global()
函数,使其显示main()
作用域中的主要x
变量,如果未定义,则显示main()
之外定义的变量?
不是你希望的,不是。main
中的名称与access_global
中的名称在任何意义上都没有关联。
如果不可能,你能解释一下为什么吗?
像往常一样:因为标准是这么说的。为什么会这样做还有一些猜测,但如果某个函数的含义根据调用上下文中存在的名称而改变,这肯定会让非常困惑,而这是编写函数时通常无法控制的。
想想看,如果access_global
从一个具有某些x
(甚至可能不是int
类型)的函数中调用一次,以及从一个没有本地x
的函数调用一次会发生什么:如果不查看所有调用方,就根本无法预测函数的作用。这是非常不切实际的。
相关文章:
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 如何改进一堆在已知值范围内评估变量的 else-if 条件?
- c++ 变量在宏的扩展中没有在这个范围内声明
- 变量不在 lambda 的范围内
- 检查私有成员变量是否在一定范围内,如果没有调整
- 如何找到在本地范围内声明的变量的地址?
- 变量未在此范围内声明 数组线性搜索
- "... already defined in *.obj"但我没有在同一范围内两次定义任何变量
- 在 mingw64- 变量下的窗口中编译 openvpn3 时出错,未在范围内声明
- 无法在命名空间范围内分配变量
- 在标头中声明时,变量未在范围内声明
- 困惑,为什么没有在此范围内声明 c++ 全局变量
- 更改if范围内变量的类型
- 错误:非静态数据成员的使用无效,在此范围内未声明变量
- "变量"未在此范围内声明
- 错误:变量未在此范围内声明
- 通过使用全局变量的函数访问在给定范围内被覆盖的变量
- 在类范围内声明时,应在 C++14 中引用变量模板
- 处理范围内变量的内部函数
- 全局范围内变量的静态含义