2013-05-28 91 views
6

对象的两个初始化之间是否存在差异?C++对象初始化和构造函数语义

Object obj(constructor_arguments); 

Object obj = Object(constructor_arguments); 

注意,第二初始化并不旨在以与操作者new的指针。它旨在成为一个非堆变量。

在海湾合作委员会都编译和工作正常,我想知道是否实际上有任何差异或如果两个语句语义相同。

+1

查看是否存在实际差异的最佳方法是检查生成的汇编代码。第一次初始化更好,但如果让编译器发挥它的魔力,第二次初始化可能会优化为同样的东西。 –

+1

可能的重复http://stackoverflow.com/questions/1051379/is-there-a-difference-in-c-between-copy-initialization-and-direct-initializati – syam

+0

@MarcClaesen这意味着看着生成的代码isn最好的办法。事实上,这是最糟糕的方式(在这种情况下),因为它可能导致错误的结论。 –

回答

11

是的。第一种是直接初始化的语法,第二种是复制初始化。

从理论上讲,第二个调用复制构造函数,但这是受到优化。

相关问题