ホームページ >バックエンド開発 >C++ >一時的な `std::string` オブジェクトの `c_str()` にアクセスしても安全ですか?

一時的な `std::string` オブジェクトの `c_str()` にアクセスしても安全ですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-06 19:10:03278ブラウズ

Is It Safe to Access the `c_str()` of a Temporary `std::string` Object?

一時文字列の c_str() にアクセスしても安全ですか?

C プログラムでは、次のコードにより懸念が生じます。

一時的な std::string オブジェクトは、 random_string_generator はコンシューマへの呼び出し前に破棄される可能性があり、c_str() ポインタが無効になる可能性があります。ただし、標準の有効期間の定義を理解することが重要です。

C 標準によれば、std::string::c_str() によって返されるポインタは、非 const 関数が呼び出されるまで有効です。 std::string オブジェクト上で行われない場合は破棄されます。指定されたコードでは、一時 std::string オブジェクトは、コンシューマーへの呼び出しを含む完全な式の最後に破棄されます。これにより、コードが整形式であることが確認されます。

コンシューマが後で使用するために c_str() ポインタを保存しようとしない限り、一時的な std::string オブジェクトは保存されないと想定しても問題ありません。時期尚早に破壊されました。テンポラリの有効期間は C 98 以降正確に定義されており、ここに示したコードのようなコードが異なるコンパイラ間でも安全に実行されることが保証されています。

以上が一時的な `std::string` オブジェクトの `c_str()` にアクセスしても安全ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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