我很确定以前有人问过这个问题,但我终究无法通过搜索找到它。
就是这样:
有什么区别:
MyObj myObj;
和
MyObj myObj = MyObj();
我相信两者都可以达到相同的效果,但是一个比另一个更好用吗?假设我只需要默认构造函数。
*edit - 我听说第一个更合适,因为第二个首先通过默认构造函数创建一个对象,然后对 myObj 进行赋值。第一个没有“分配”操作,所以第一个会“更快”。真相?
最佳答案
是的,可能会有差异。
在第一个实例中,如果 myObj
是 POD 类型,则它不会被初始化,否则它会被默认初始化。
在第二个实例中,myObj
是从一个value-initialized 临时copy-initialized。可以(并且几乎肯定应该)消除临时值以产生值初始化的效果。
如果 MyObj
有一个构造函数,那么总是会调用一个构造函数。对于第一种情况,默认构造函数必须是可访问的,对于第二种情况,复制构造函数和默认构造函数都必须是可访问的,尽管只能调用默认构造函数。
除了 POD 类型的“未初始化”和值初始化之间的明显区别外,默认初始化和值初始化之间也有区别-为没有用户定义的构造函数的非 POD 类型初始化。对于这些类型,POD 成员不会在默认初始化 中进行初始化,而是在父类的值初始化 中进行零初始化。
关于C++以两种不同的方式从类中实例化一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4504722/