在我看来,定义总是意味着存储分配。
在下面的代码中,int i
在程序堆栈上分配一个 4 字节(通常)的存储空间并将其绑定到i
,i = 3
并将 3 分配给该存储空间。但是因为goto
,定义被绕过,这意味着没有为 分配存储i
。
我听说局部变量是f()
在它们所在的函数(在这种情况下)的入口处分配的,或者在定义点处分配的。
但无论哪种方式,如何i
在尚未定义的情况下使用(根本没有存储空间)?执行时将值三分配到哪里i = 3
?
void f()
{
goto label;
int i;
label:
i = 3;
cout << i << endl; //prints 3 successfully
}