0
class myObj
{
   myObj() {};
}

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

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

MakeObj関数では、objは値によって返されます。したがって、割り当てでは、作成されたオブジェクトがコピーされます。2つの操作があるようです。1つはオブジェクトを作成してMakeObjでそのフィールドを割り当てるためのもので、もう1つは戻り時にオブジェクトをコピーするためのものです。

これらのステップの1つは、コンパイラーによって最適化されていますか?
複雑なオブジェクトを作成して割り当てるための最速の方法は何ですか?

4

1 に答える 1

2

意味的に言えば、C ++ 03では、コード内に2つのコピーが作成されます。つまり、から戻る場合ですMakeObj()が、最初のコピーは通常、コンパイラによって最適化されます。その最適化は、戻り値の最適化と呼ばれます。

C ++ 11では、返されるオブジェクトは実際に移動され(使用可能でアクセス可能な場合)、コピーされるのではなく、コンパイラーによって最適化されます。

于 2012-12-17T06:07:31.750 に答える