POD 类对象初始化是否需要构造函数

does POD class object initialization require constructor?

本文关键字:构造函数 是否 初始化 对象 POD      更新时间:2023-10-16


我阅读了以下链接:-

使用和不带括号初始化的对象

默认构造函数的类型

比较黑白值,零和默认灌输

我有一些问题想澄清一下。


1)给定一个POD类,说:-

class A{
        int val;
};


如果我创建一个类型 A 的对象。

一个 obj;//这个调用会隐式定义编译器提供的构造函数吗?
现在就我对这种情况中的理解而言,构造函数 called.is 不正确?

new A();//value-initialize A,因为它是一个 POD,所以是零初始化。现在在这种情况下,编译器将隐式定义的构造函数提供?构造函数是否有任何角色用于零初始化对象?

如果我的理解是错误的,你能给我一个例子,其中隐式定义的定义构造函数根本没有被调用。

提前谢谢你。

1) 正确。 obj.val未初始化。

2)这是一个函数声明,而不是初始化:

A obj(); // function obj() returning an A

如果你这样做,

A obj{};     //C++11
A obj = A(); // C++03 and C++11

obj将被值初始化obj.val也是如此。这反过来意味着obj.val初始化为值初始化意味着内置类型的零初始化)。

A obj;
它调用默认构造函数

(甚至不用于优化),但是默认构造函数不会初始化它。

 

A obj();

它是一个函数声明。没有参数并返回A .

 

A obj{};

相反,您可以使用上述将val设置为零的代码。