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

时间:2013-11-11 17:22:07

标签: c++ constructor standards pod


我读了以下链接: -

object initialized with and without parentheses

types of default constructor

diff b/w value,zero and default intilization

我有一些问题需要澄清。


1)鉴于POD课程,请说: -

class A{
        int val;
};


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

一个obj; //这会调用隐式定义的编译器提供的构造函数吗? 现在,据我所知,在这种情况下,构造函数没有被调用。它是否正确?

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

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

提前谢谢。

2 个答案:

答案 0 :(得分:3)

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 零初始化值初始化表示内置类型的零初始化

答案 1 :(得分:2)

A obj;

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

A obj();

这是一个功能声明。没有参数并返回A

A obj{};

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