4

如果您说一个int未初始化的局部变量,那么它会得到一个未定义的值,但是如果您有一个局部char变量,那么它也不应该有一个未定义的值吗?当然 0 可能是那个未定义的值,但我想知道 char 是否有任何不同,因为我找到的所有相关信息都是关于int的,并且当 char 变量转换为 int 时,下面的程序只输出 0。我使用没有标志的 GCC 4.7。

int main()
{
char test1;
int test2;

std::cout<<test2; //garbage
std::cout<<std::endl;
std::cout<<(int)test1; //0
    return 0;
}
4

3 回答 3

4

未初始化意味着真正未初始化。仅仅因为您在特定时间在您的机器上始终获得特定值,并不意味着在所有机器上总是如此。

您可以通过转储函数的汇编代码并检查它来验证没有任何东西正在初始化您的变量。

于 2012-10-19T04:24:02.840 回答
3

如果你让我们说一个未初始化的本地 int,那么它会得到一个未定义的值

不,这不是正确的思考方式。您的局部变量没有得到未定义的值,它没有任何值。随后查询此类未初始化的变量会调用未定义的行为

您的程序不一定会打印“0”。它不一定会打印任何数字,甚至根本不会打印任何东西。当然,在典型的计算机上,使用典型的编译器,你的程序会打印一些数字,但是在 C++ 语言的范围内,我们无法预测你的程序会做什么或不做什么

于 2012-10-19T05:41:02.823 回答
2

局部变量从它们当时占据的堆栈空间中的任何随机数据中获取其初始值。不能保证空格包含零。

于 2012-10-19T04:24:23.443 回答