如果你有一个未初始化的本地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;
}
答案 0 :(得分:4)
未初始化意味着真正未初始化。仅仅因为您在特定时间在您的机器上始终获得特定值,并不意味着所有机器上的情况始终如此。
您可以通过转储函数的汇编代码并检查它来验证没有任何内容正在初始化。
答案 1 :(得分:2)
局部变量从当时占用的堆栈空间中的任何随机数据中获取其初始值。无法保证空间包含零。
答案 2 :(得分:2)
如果你让我们说一个未初始化的本地int,那么它会得到一个未定义的值
不,这不是思考它的正确方法。你的局部变量没有得到一个未定义的值,它没有任何价值。随后查询这样一个未初始化的变量会调用未定义的行为。
您的程序不一定会打印“0”。它不一定会打印任何数字,甚至任何。当然,在典型的计算机上,使用典型的编译器,你的程序会打印一些数字,但是在C ++语言的范围内,我们无法对你的程序做什么或不做什么进行任何预测。