【发布时间】:2011-12-16 14:41:49
【问题描述】:
在我看来,定义总是意味着存储分配。
在下面的代码中,int i 在程序堆栈上分配一个 4 字节(通常)的存储空间并将其绑定到 i,i = 3 将 3 分配给该存储空间。但是因为goto,定义被绕过,这意味着没有为i分配存储空间。
我听说局部变量要么在它们所在的函数入口(在本例中为f())分配,要么在定义点分配。
但无论哪种方式,i 在尚未定义的情况下如何使用(根本没有存储空间)?执行i = 3时赋值3在哪里?
void f()
{
goto label;
int i;
label:
i = 3;
cout << i << endl; //prints 3 successfully
}
【问题讨论】:
-
您将代码编译顺序与控制流混淆了
标签: c++ scope variable-declaration