int myInt;
cout << myInt; // Garbage like 429948, etc
如果我在C ++中输出和/或使用未初始化的变量,它们的假设值是什么?
例如:程序A已关闭,它在1234
处有一个值0x1234
的int - &gt;我运行我的程序,myInt
获取地址0x1234
,我将其输出如上 - &gt; 1234
答案 0 :(得分:11)
“随机垃圾”,但强调“垃圾”,不“随机” - 即绝对任意垃圾甚至没有任何“随机性”保证 - 编译器和运行时系统被允许绝对有任何东西(有些系统可能总是给零,其他可能给出任意不同的值,等等。)
答案 1 :(得分:5)
它甚至不能保证是一个价值。尝试读取int,可能发生任何事情(例如发送的信号导致程序终止)。在现实生活中,特别重要的是,启用未初始化的bool
可能会导致您遇到true
或false
个案件。
答案 2 :(得分:4)
它的价值是不确定的。 (第8.5节/ 9)
尝试从中获取有意义的数据是没有用的。在实践中,它恰好发生在那里。
大多数编译器会在调试版本中打包“有意义”的调试数据。例如,MSVC会将事物初始化为0xCCCCCCCC。当然,这在优化的构建中被删除。
答案 3 :(得分:2)
整数是堆栈上的变量,因为它是局部变量。只要它尚未初始化,堆栈上的数据就是原样。它是以前使用过的数据(的一部分)。所以它是垃圾,但它不是随机的,因为给定可执行文件和开始状态,该值是可预测的。预测很难,因为你必须考虑操作系统,编译器等帐户,而且这是非常没有意义的。
答案 4 :(得分:2)
程序A已关闭,它有一个int值为1234,位于0x1234 - &gt;我运行我的程序,myInt得到地址0x1234 ......
另请注意,由于现代操作系统中的虚拟内存,所谓的地址0x1234的程序A不太可能实际引用物理内存中与程序调用地址0x1234相同的空间。