12

重複の可能性:
C ++:一時的な引数の寿命?

一時変数は、完全な式を評価する最後のステップとして破棄されると言われています。

bar( foo().c_str() );

一時的なポインタはバーが戻るまで存続しますが、

baz( bar( foo().c_str() ) );

それはbarが戻るまでまだ存続しますか、それともbaz returnはここで完全な式が終了することを意味します。bazが戻った後にオブジェクトを破棄することをチェックしたコンパイラですが、それを信頼できますか?

4

2 に答える 2

16

テンポラリーは、それらが作成された完全な式の最後まで存続します。「完全な式」とは、別の式の部分式ではない式です。

In baz(bar(...));,bar(...)は の部分式ですがbaz(...)、 whilebaz(...)は何かの部分式ではありません。したがって、完全な式であり、この式の評価中に作成されたすべての一時変数は、返さbaz(...)れるまで削除されません。baz(...)

于 2011-05-19T13:08:26.197 に答える
3

名前が示すように、完全式は への呼び出しを含むすべての式であるbaz()ため、一時的な式は への呼び出しが戻るまで存続しbaz()ます。

于 2011-03-28T13:38:18.057 に答える