结构字段上的默认初始化行为

Zhe*_*hen 1 c++

代码编写时:

#include <iostream>

using namespace std;

struct ID {
    char *name;
    int age;
};

int main() {
    ID a;

    cout << (long)(a.name) << endl;
    cout << a.age << endl;
    // cout << (a.name == nullptr) << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果是:

0
0
Run Code Online (Sandbox Code Playgroud)

但是,当它写成:

#include <iostream>

using namespace std;

struct ID {
    char *name;
    int age;
};

int main() {
    ID a;

    cout << (long)(a.name) << endl;
    cout << a.age << endl;
    cout << (a.name == nullptr) << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果似乎很奇怪:

140735032148552
1545300144
0
Run Code Online (Sandbox Code Playgroud)

这两个版本怎么会有很大差异?

Som*_*ude 8

由于未定义的行为.定义局部变量不会初始化它,结构的内容将是不确定的,并且使用它将导致所述UB.