class myObj
{
myObj() {};
}
myObj MakeObj()
{
return( myObj() );
}
main()
{
myObj o = MakeObj();
}
在MakeObj函数中,obj由value返回。因此,在赋值中,将复制创建的对象。似乎有两个操作 - 一个用于创建对象并在MakeObj中分配其字段,另一个用于在返回时复制对象。
编译器是否优化了其中一个步骤?
创建复杂对象并分配它的最快方法是什么?
答案 0 :(得分:2)
从语义上讲,在C ++ 03中,代码中有两个副本,即从MakeObj()
返回时,但第一个副本通常会被编译器优化掉。该优化称为Return Value Optimization。
在C ++ 11中,返回的对象实际上是移动(如果可用且可访问),而不是复制,这是由编译器优化的。