C で一時オブジェクトを定数参照にバインドすると寿命が延びるのはなぜですか?

DDD
リリース: 2024-11-02 17:03:02
オリジナル
626 人が閲覧しました

Why Does Binding a Temporary Object to a Constant Reference Extend its Lifetime in C  ?

一時オブジェクトを返し、定数参照にバインドする

C では、一時オブジェクトを定数参照に代入する一般的な操作であり、最初はオブジェクトの有効期間について疑問が生じる可能性があります。

質問:

次のコードは有効であり、コンパイラ エラーが発生しないのはなぜですか?

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

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

回答:

C は、一時オブジェクトを定数スタックベースの参照にバインドすると、一時オブジェクトの存続期間が参照の存続期間と一致するまで延長されることを明示的に定義しています。このシナリオでは、foo() によって返される一時オブジェクトは main() 関数が終了するまで存続します。

説明:

  • 一時オブジェクトには通常、
  • ただし、C ではスタック上の const 参照の例外が許可されています。
  • スタック上の const 参照にテンポラリをバインドすることにより、
  • これにより、破棄されたオブジェクトを指す参照によって引き起こされるダングリング参照エラーが防止されます。

注:

  • この例外はスタックベースの const 参照にのみ適用されます。
  • オブジェクトのメンバーである参照には適用されません。
  • 詳細については、ハーブ・サッターの「GotW #88: 「最も重要な const」の候補」を参照してください。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!