我读了以下链接: -
object initialized with and without parentheses
diff b/w value,zero and default intilization
我有一些问题需要澄清。
1)鉴于POD课程,请说: -
class A{
int val;
};
如果我创建了A类型的对象。
一个obj; //这会调用隐式定义的编译器提供的构造函数吗?
现在,据我所知,在这种情况下,构造函数没有被调用。它是否正确?
new A(); // value-initialize A,它是零初始化,因为它是POD。 现在在这种情况下会隐式定义编译器提供的构造函数吗?构造函数是否有任何初始化对象的作用?
如果我的理解是错误的,你能不能给我一个例子,其中根本没有调用隐式定义的定义构造函数。
提前谢谢。
答案 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
设置为零。