Nic*_*ick 9 c++ constructor object instantiation
我很确定之前曾经问过这个问题,但我不能通过搜索找到它.
所以这里:
有什么区别:
MyObj myObj;
Run Code Online (Sandbox Code Playgroud)
和
MyObj myObj = MyObj();
Run Code Online (Sandbox Code Playgroud)
我相信两者都能达到相同的效果,但是比另一种更好用吗?假设我想要的只是默认构造函数.
*编辑 - 我听说第一个更合适,因为第二个首先通过默认构造函数创建一个对象,然后分配给myObj.第一个没有"分配"操作,因此第一个将"更快".真相?
是的,可能会有所不同.
在第一个实例中,myObj如果它是POD类型则不会被初始化,否则它是默认初始化的.
在第二个实例myObj中,从值初始化的临时值进行复制初始化.临时可能(并且几乎肯定应该)被删除以进行效果值初始化.
如果MyObj有一个构造函数,那么将始终调用构造函数.对于第一种情况,必须可以访问默认构造函数,对于第二种情况,必须可以访问复制和默认构造函数,尽管只能调用默认构造函数.
除了POD类型的"未初始化"和值初始化之间的明显差异之外,对于没有用户定义的构造函数的非POD类型,默认初始化和值初始化之间存在差异.对于这些类型,POD成员不会在默认初始化中初始化,而是在父类的值初始化中零初始化.