我很好奇在for-loops(etc)的初始化部分中声明的变量范围背后的设计考虑因素.这些变量似乎既不在范围内,也不在范围之内,或者我错过了什么?为什么这个以及何时需要?即:
for (int i = 0; i < 10; i++)
{
}
i = 12; //CS0103: The name 'i' does not exist in the current context
int i = 13; //CS0136: A local variable named 'i' cannot be declared in this scope
//because it would give a different meaning to 'i', which is already
//used in a 'child' scope to denote something else
Run Code Online (Sandbox Code Playgroud)
循环变量的作用域为循环本身。这就是为什么您会看到 i 在循环之外不可用的预期结果。
您无法在循环之外声明 i 的事实有点令人费解,但与以下事实有关:编译后,所有变量声明都可以被视为位于声明它们的块的开头。这就是您的代码实际上与以下相同:
int i;
for (int i = 0; i < 10; i++)
{
}
i = 13;
Run Code Online (Sandbox Code Playgroud)
希望这里很明显您有名称冲突。至于为什么会这样,我不能肯定地告诉你。我不太了解编译器在幕后所做的事情,但希望其他人会出现并解释原因。
| 归档时间: |
|
| 查看次数: |
559 次 |
| 最近记录: |