为什么以下代码输出0?在我的理解中,这是默认初始化(而不是值初始化),所以值应该是随机的。
#include <stdio.h>
#include<iostream>
#include<memory>
using namespace std;
struct A
{
int i;
int j;
};
int main()
{
A a;
cout << " i is " << a.i << endl;
return 0;
}
来自cppreference:
默认初始化的效果为:
如果T是非POD(C++11之前)类类型,则会考虑构造函数,并根据空参数列表进行重载解析。选择的构造函数(其中之一是默认构造函数)被调用以为新对象提供初始值;
如果T是数组类型,则对数组的每个元素进行默认初始化;
否则,什么也不做:具有自动存储期限的对象(及其子对象)将被初始化为不确定的值。
a
被放置在内存中的某个位置,而i
和j
的值反映了该内存中的内容。您事先不知道该内存中的内容,这导致它们的值是不确定的,而不是“随机”的(即使有时看起来可能是这样)。 - Some programmer dude