我了解到自动变量未初始化为零。因此,以下代码将正常运行并在屏幕上打印随机数字:
#include <iostream>
using std::cout;
using std::endl;
void doSomething()
{
int i;
cout << i << endl;
}
int main()
{
doSomething();
}
但为什么这个剪辑不会以同样的方式表现呢?
#include <iostream>
using std::cout;
using std::endl;
void doSomething()
{
int i;
cout << i << endl;
}
int main()
{
int j;
cout << j << endl;
doSomething();
}
此代码段显示:
0
0
有谁知道为什么“j”和“i”在这里突然被初始化为零?
答案 0 :(得分:4)
使用未初始化的变量是未定义的行为。您可能不会在另一个编译器上获得相同的行为。唯一的“原因”是在您的特定C ++编译器的源代码中找到。
答案 1 :(得分:0)
如果为对象指定了初始化程序,则该初始值设定项确定对象的初始值。如果未指定初始化程序,则将全局(第4.9.4节),名称空间(第8.2节)或本地静态对象(第7.1.2节,第10.2.2节)(统称为静态对象)初始化为适当类型的0
例如:
// Global scope
int a; // means ‘‘int a = 0 ;’’
double d; // means ‘‘double d = 0.0;’’
默认情况下,不会初始化本地变量(有时称为自动对象)和在空闲存储上创建的对象(有时称为动态对象或堆对象)。
例如:
void f()
{
int x; // x does not have a well defined value
// ...
}
来自 Stroustrup,The C ++ Programming Language,3rd edition,p.83 - §4.9.5