ホームページ > バックエンド開発 > C++ > 一時的な C 文字列の寿命はどれくらいですか?

一時的な C 文字列の寿命はどれくらいですか?

Barbara Streisand
リリース: 2024-12-10 18:30:11
オリジナル
831 人が閲覧しました

How Long Do Temporary C   Strings Live?

一時ファイルの存続期間: 複雑さを解明する

問題のコード スニペットには、foo() 関数から一時的な std::string オブジェクトを返し、その後 bar( ) 一時的な c_str() ポインタを使用します。この懸念は、一時ファイルが bar() の実行前に破棄されるという仮定から生じています。

しかし、この仮定は正しくありません。 C 言語標準によれば、一時オブジェクトは、それが関与する完全な式が完了するまで存在します。この概念は、次のコード構造で説明されています。

____________________     range of full expression
bar( foo().c_str() );
     ^^^^^               ^
       |               |
     birth           funeral
ログイン後にコピー

この例では、foo() によって返される一時オブジェクトの存続期間は、「誕生」というラベルが付いた時点での作成から「葬儀」での破棄まで延長されます。 。」この破棄は、最初に考えられていたように、bar() の呼び出し前ではなく、bar() の呼び出し後に発生します。

正確なルールでは、字句的に右辺値 (右側の式) を含む完全な式が含まれるときに一時オブジェクトが破棄されると規定しています。作成責任者が評価を終了します。指定されたコードでは、この完全な式は関数呼び出し自体、bar( foo().c_str() ) です。したがって、一時オブジェクトはこの呼び出しが完了するまで存在し続け、bar() がその c_str() ポインターに確実にアクセスできるようになります。

以上が一時的な C 文字列の寿命はどれくらいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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