ホームページ バックエンド開発 C++ Const 参照が C の一時オブジェクトの寿命を延ばすのはなぜですか?

Const 参照が C の一時オブジェクトの寿命を延ばすのはなぜですか?

Oct 26, 2024 pm 04:04 PM

Why Do Const References Extend the Lifetime of Temporary Objects in C  ?

Const 参照を使用した一時オブジェクトのライフタイムについて理解する

はじめに:

C では、ライフタイム一時オブジェクトの範囲は、通常、それらが作成された式の終わりまでにのみ拡張されます。ただし、一時オブジェクトが const 参照にバインドされ、その存続期間が元のスコープを超えて延長される場合、例外が発生します。

特定の問い合わせ:

次のコードはなぜコンパイルされ、 foo 関数から返された文字列が一時オブジェクトであっても、正常に実行されますか?

<code class="cpp">string foo() {
  return string("123");
}

int main() {
  const string&amp; val = foo();
  printf("%s\n", val.c_str());
  return 0;
}</code>
ログイン後にコピー

答え:

C 標準では、一時オブジェクトのバインディングを明示的に定義しています。スタック上の const への参照を参照すると、一時参照の有効期間が参照自体の有効期間まで延長されます。したがって、提供されたコードでは、foo() によって返される一時文字列は、main 関数の右中かっこまで存続します。

メカニズム:

この機能により、次のことが保証されます。一時オブジェクトへの参照は、未定義の動作を引き起こすダングリング参照にはなりません。一時オブジェクトが const 参照にバインドされている間、そのメモリは事実上固定されているため、プログラムは安全に使用し続けることができます。

制限事項:

注意することが重要です。この有効期間の延長はスタックベースの参照にのみ適用されます。対照的に、オブジェクトのメンバーである参照は、一時オブジェクトの存続期間を延長しません。

追加情報:

このトピックの詳細については、を参照してください。 GotW #88: 「最も重要なコンスト」の候補 by Herb Sutter。

以上がConst 参照が C の一時オブジェクトの寿命を延ばすのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

c言語関数形式文字ケース変換手順 c言語関数形式文字ケース変換手順 Mar 03, 2025 pm 05:53 PM

c言語関数形式文字ケース変換手順

C言語関数によって返される値の種類は何ですか?返品値を決定するものは何ですか? C言語関数によって返される値の種類は何ですか?返品値を決定するものは何ですか? Mar 03, 2025 pm 05:52 PM

C言語関数によって返される値の種類は何ですか?返品値を決定するものは何ですか?

GULC:Cライブラリはゼロから構築されています GULC:Cライブラリはゼロから構築されています Mar 03, 2025 pm 05:46 PM

GULC:Cライブラリはゼロから構築されています

C言語関数の定義と呼び出しルールは何ですか、そして C言語関数の定義と呼び出しルールは何ですか、そして Mar 03, 2025 pm 05:53 PM

C言語関数の定義と呼び出しルールは何ですか、そして

C標準テンプレートライブラリ(STL)はどのように機能しますか? C標準テンプレートライブラリ(STL)はどのように機能しますか? Mar 12, 2025 pm 04:50 PM

C標準テンプレートライブラリ(STL)はどのように機能しますか?

明確な使用法とフレーズ共有 明確な使用法とフレーズ共有 Mar 03, 2025 pm 05:51 PM

明確な使用法とフレーズ共有

メモリに保存されているC言語関数の返品値はどこにありますか? メモリに保存されているC言語関数の返品値はどこにありますか? Mar 03, 2025 pm 05:51 PM

メモリに保存されているC言語関数の返品値はどこにありますか?

STL(ソート、検索、変換など)のアルゴリズムを効率的に使用するにはどうすればよいですか? STL(ソート、検索、変換など)のアルゴリズムを効率的に使用するにはどうすればよいですか? Mar 12, 2025 pm 04:52 PM

STL(ソート、検索、変換など)のアルゴリズムを効率的に使用するにはどうすればよいですか?

See all articles