可能性の重複:
Understanding return value optimization and returning temporaries - C++ステップ
はそれがメンバーだとしてInteger
がi
といくつかのクラスになりましょう。 left
とright
は、引数として関数呼び出しに渡され、タイプはInteger
であり、現在はBruce Eckelに与えられています。
コード1:
return Integer(left.i+right.i);
コード2:
Integer tmp(left.i+right.i);
return tmp;
コード1は、一時的な整数オブジェクトを作成し、それを返すと言うと、それは、名前のローカル変数を作成し、それを返すと異なっています一般的な誤解です。コード1(一時的なアプローチを返すと呼ばれる)で
:
コンパイラは、あなたはit.Theコンパイラはbuilding the object directly into the location of the outside return value
によってこの利点を取り戻すために、次に作成のオブジェクトに他の必要性を持っていないことを知っています。これには、通常のコンストラクタ呼び出し(コピーコンストラクタなし)が1つだけ必要であり、ローカルオブジェクトが作成されていないためデストラクタは必要ありません。
ながらコード2に起こるのだろう3つの事:そのコンストラクタ呼び出し
B)the copy-constructor copies the tmp to the location of the outside return value
含む
a)はTMPオブジェクトを作成しています。
c)デストラクタはスコープの終わりにtmpのために呼び出されます。
コード1では、これはどういう意味ですか?building the object directly into the location of the outside return value
?
なぜコピーコンストラクタはコード1で呼び出されませんか?
また、コード2のステップbは何をしているのか分かりませんでしたか?すなわちthe copy-constructor copies the tmp to the location of the outside return value
。
「整数」はJavaに属します。 – iammilind
ここで定義されていて(コードは表示されていない)、1つのintメンバーiとrest関数を持っているものとします。 –
良いコンパイラは、両方のケースで同じアセンブリコードを作成します。 – littleadv