Const 参照を使用した一時オブジェクトのライフタイムについて理解する
はじめに:
C では、ライフタイム一時オブジェクトの範囲は、通常、それらが作成された式の終わりまでにのみ拡張されます。ただし、一時オブジェクトが const 参照にバインドされ、その存続期間が元のスコープを超えて延長される場合、例外が発生します。
特定の問い合わせ:
次のコードはなぜコンパイルされ、 foo 関数から返された文字列が一時オブジェクトであっても、正常に実行されますか?
<code class="cpp">string foo() { return string("123"); } int main() { const string& 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 サイトの他の関連記事を参照してください。