0

您如何称呼这两种不同的方式,它们有何不同?

ClassName variable(arg1); 

ClassName variable = ClassName(arg1);
4

2 回答 2

5
ClassName variable(arg1); 

这是直接初始化。假设它是类类型,则通过将参数传递给合适的构造函数来初始化对象。如果没有合适的构造函数,这是一个错误。

ClassName variable = ClassName(arg1);

这是复制初始化。从概念上讲,它创建并直接初始化一个临时的;然后通过复制或移动临时变量来初始化变量。如果没有合适的移动或复制构造函数,这是一个错误。

在实践中,复制或移动可能会被省略,因此结果将与直接初始化相同 - 除了仍然必须有一个可访问的移动或复制构造函数,即使它没有实际使用。

于 2013-11-04T17:07:44.757 回答
2
case 1:
ClassName variable(arg1); 
//will initialize variable directly with the type constructor

case 2:
ClassName variable = ClassName(arg1); 
//should initialize variable directly with a copy of the rvalue
//however because of RVO optimiziation this is tha same as case 1

RVO 是来自编译器的优化,它消除了对构造/复制/破坏的不必要调用,在这种情况下它们是相同的。

于 2013-11-04T17:06:05.403 回答