ホームページ > バックエンド開発 > C++ > C の一時関数の引数が破棄されるのはいつですか?

C の一時関数の引数が破棄されるのはいつですか?

Susan Sarandon
リリース: 2025-01-04 17:09:44
オリジナル
286 人が閲覧しました

When Exactly Do C   Temporary Function Arguments Get Destroyed?

一時関数の引数はいつ消滅しますか?

C では、一時オブジェクトが関数の引数として作成されると、コンパイラが自動的に寿命を管理します。ここで疑問が生じます: 一時オブジェクトのデストラクターはどの時点で呼び出されることが保証されていますか?

C 標準によれば、一時オブジェクトは、その一部である完全な式の最後に破棄されます。ここで、完全な式とは、別の式の部分式ではない式です。通常、制御フロー ステートメント (if、while、switch など) のセミコロン (;) または閉じ括弧 () で終了します。

提供された例では、

class MyClass
{
  MyClass(int a);
};

myFunction(MyClass(42));
ログイン後にコピー

関数の引数として作成された一時的な MyClass オブジェクトは、関数呼び出しステートメントの終了後、つまりセミコロンに遭遇したときに破棄されます。したがって、後続のステートメントが実行される前にデストラクターが呼び出されると想定できます。

const 参照を使用して一時変数の有効期間を延長できることは注目に値します。一時オブジェクトを const 参照にバインドすることにより、その有効期間は参照の有効期間と一致するように延長されます。

MyClass getMyClass();

{
  const MyClass& r = getMyClass(); // full expression ends here
  ...
} // object returned by getMyClass() is destroyed here
ログイン後にコピー

この手法により、特に戻り値の最適化の場合に、関数によって返される値を保持しながら、不要なコピー構造を節約できます。は適用されません。ただし、C 11 での移動セマンティクスの出現により、その有用性は若干低下しました。

以上がC の一時関数の引数が破棄されるのはいつですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート