我知道非 POD 类型的默认初始化也会通过调用它们的默认构造函数来默认初始化非静态非 POD 成员变量。但我不确定这是如何发生的。这是我的意思的一个例子:
#include <iostream>
#include <vector>
using namespace std;
class Test2 {
public:
Test2() {cout <<"Here";}
};
class Test {
public:
Test() {}
Test2 i;
};
int main() {
Test foo;
}
输出是:
Here
基于初始化器的 C++ 标准 (8.5),对于默认初始化:
— if T is a non-POD class type (clause 9), the default constructor
for T is called (and the initialization is ill-formed if T has no
accessible default constructor);
因此,鉴于此,我确实希望默认构造函数Test()
会被调用,但是我的空类默认构造函数尚未明确Test
初始化,以某种方式被隐式调用。我想知道这是怎么发生的?Test2 i
Test2()
同样,对于值初始化(与上面的示例无关),如果一个空的用户定义的默认构造函数没有显式地将 POD 非静态成员变量初始化为零,那么该变量如何初始化为零(我知道它确实这样做)?由于基于标准,似乎对于值初始化,当您拥有用户定义的默认构造函数时发生的所有事情就是构造函数被调用。
值初始化的 C++ 标准的相应部分如下:
— if T is a class type (clause 9) with a user-declared constructor (12.1), then the
default constructor for T is called (and the initialization is ill-formed if T has no
accessible default constructor);
这个问题类似于c++ 空构造函数和成员初始化 ,但不同的是,我不是问最终结果行为是什么,而是想知道为什么会发生最终结果行为。