【发布时间】:2013-05-23 22:31:09
【问题描述】:
对象的两种初始化有区别吗?
Object obj(constructor_arguments);
或
Object obj = Object(constructor_arguments);
请注意,第二次初始化并不打算使用new 运算符的指针。它旨在成为非堆变量。
在 GCC 中编译和工作都很好,我想知道是否真的有任何区别,或者两个语句在语义上是否相同。
【问题讨论】:
-
查看是否存在实际差异的最佳方法是检查生成的汇编代码。第一次初始化更好,但如果让编译器发挥作用,第二个版本可能会针对相同的事情进行优化。
-
@MarcClaesen 这意味着查看生成的代码并不是最好的方法。事实上,这是最糟糕的方式(在这种情况下),因为它可能导致错误的结论。
-
@LuchianGrigore,我明白你的意思,但我会说这取决于问题(这在这方面是模棱两可的)。如果问题是“理论上哪个更有效?”,答案肯定是前者。如果问题是“哪个在实践中更有效?”在优化后它们很可能是等效的。
标签: c++ object constructor