ホームページ  >  記事  >  バックエンド開発  >  C で一時オブジェクトを定数参照にバインドすると寿命が延びるのはなぜですか?

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

DDD
DDDオリジナル
2024-11-02 17:03:02627ブラウズ

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 サイトの他の関連記事を参照してください。

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