0
class myObj
{
   myObj() {};
}

myObj MakeObj()
{
    return( myObj() );
}

main()
{
   myObj o = MakeObj();
}

在 MakeObj 函数中,obj 是按值返回的。所以在赋值中,创建的对象被复制。似乎有两种操作 - 一种是创建对象并在 MakeObj 中分配其字段,另一种是在返回时复制对象。

编译器是否优化了这些步骤之一?
创建复杂对象并分配它的最快方法是什么?

4

1 回答 1

2

从语义上讲,在 C++03 中,代码中有两个副本,即当它从 中返回时MakeObj(),但第一个副本通常被编译器优化掉。该优化称为返回值优化

在 C++11 中,返回的对象实际上是移动的(如果可用且可访问),而不是被复制的,它被编译器优化掉了。

于 2012-12-17T06:07:31.750 回答