我感到困惑的是为什么我被允许这样做(if语句只是展示作用域):
int i = 0;
if(true)
{
float i = 1.1;
}
我有C#编程背景,这样的声明是不允许的。基本上,程序员在重新声明变量“i”,因此给“i”赋予了新的含义。欢迎提供任何见解。
谢谢!
int i = 0;
if(true)
{
float i = 1.1;
}
我有C#编程背景,这样的声明是不允许的。基本上,程序员在重新声明变量“i”,因此给“i”赋予了新的含义。欢迎提供任何见解。
谢谢!
if
并编写如下代码:int i = 0;
{
// Here, the outer i becomes inaccessible
float i = 1.1;
{
int i = 2;
printf("%d", i); // 2 is printed
}
}
C#标准决定不支持此操作,可能是因为它有很高的出错概率,但C/Objective C没有问题。
i
,而是在遮蔽它。只有当i
在不同层级的范围内声明时才会起作用。C#允许遮蔽,但不适用于if
语句/switch
语句,而C/C++/Objective-C则允许此类遮蔽。i
超出范围后,标识符i
将再次引用i
的int
版本。因此,这并未改变原始i
所指向的内容。遮蔽变量通常不是您想要做的事情(除非您小心,否则遮蔽很可能是一个错误,尤其是对于初学者来说)。