在不同的空格中使用相同名称的变量
Using a variable with the same name in different spaces
这段代码可以编译,但是我在Visual Studio中有一个运行时错误:
运行时检查失败#3 -变量'x'被使用而没有初始化…
int x = 15;
int main()
{
int x = x;
return 0;
}
我不理解那种行为……在错误框中,当我点击继续程序恢复和x有损坏的内容(如-8556328
而不是15
)。
为什么这段代码没有问题,并且int数组声明得很好?
const int x = 5;
int main()
{
int x[x] = {1,2,3,4};
return 0;
}
x
定义在=
的左边
所以在x[x]
中,[x]
是指全局的,
而在x = x;
中,x
隐藏全局x
并从自身初始化-> UB。
当你声明一个新变量时,它的名字在这里变得可见
int x =
// ^- there
,因为此时变量已完全声明,因此;它的名字是有意义的。此时,周围作用域中的任何其他(先前声明的变量)都将被隐藏。
在C语言中没有范围解析操作符,所以您可能无法使用
int x = x;
请使用SRO(作用域解析操作符::)来告诉编译器哪个x是你心目中的真实x。由于用户定义的名称是这样被修饰的,以避免在它的级别上产生歧义,这些只是编译器使用的最适合它的名称
int x = 15;// Real name = gui_x
int main()
{
int x = x;// lui_x
return 0;
}
这样,运行时将知道您使用的是哪个版本,但为了避免歧义,它希望您使用特定的名称。有时上述问题出现在您不知道您正在使用已使用的名称的情况下。为此,c++创建了SRO。
现在在数组x的情况下是地址&不是存储东西的整数,这就是为什么编译器没有乱码。你需要写
namespace abc //now all global variables are belongs to this ns abc
int x = 15;// Real name = gui_x
int main()
{
int x = abc::x;// lui_x
return 0;
}
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 将数组的地址分配给变量并删除
- 为"adjacent"变量赋值时出现问题
- enum是C++中的宏变量还是整数变量
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 2D数组来自文本输入,中间有空格
- 用C++中的一个变量定义一个常量
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 你能重载对象变量名本身返回的内容吗
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 尝试通过多个向量访问变量时,向量下标超出范围
- 试图让变量检查数组中的某些内容
- Cpp-Tuple使用带有变量的get
- 如何计算字符串变量中的空格
- 如何查找空格并存储到变量中
- 当一个部分可以有空格时,如何将字符串解析为多个变量
- 在不同的空格中使用相同名称的变量
- 无法在变量名中加入空格- Visual Studio 2015 (c++)