C で一時文字列を使用した `std::string::c_str()` の使用は安全ですか?

Mary-Kate Olsen
リリース: 2024-11-13 14:09:02
オリジナル
825 人が閲覧しました

Is Using `std::string::c_str()` with a Temporary String Safe in C++?

Preserving the Integrity of Temporary Strings: Exploring std::string::c_str()

In the realm of C++, the safety and validity of code involving temporary strings often raise concerns. One such question surrounds the usage of std::string::c_str() within the context of temporary strings.

The Question:

Consider the following code snippet:

void consumer(char const* p)
{
  std::printf("'%s'", p);
}

std::string random_string_generator();

consumer(random_string_generator().c_str());
ログイン後にコピー

The dilemma stems from the potential destruction of the temporary std::string object after retrieving its c_str() pointer. Does this pose a validity concern according to the C++ standard?

The Answer:

Understanding the lifetime of temporaries is crucial. In C++, temporaries are destructed at the end of the full expression, not immediately after their creation or before their usage. Therefore, in the given code, the temporary std::string object will persist until the conclusion of the function call to consumer().

The pointer obtained via std::string::c_str() remains valid until any non-const operation is performed on the string object or it is destructed. Since the string object is temporary and destructed at the end of the full expression, the code is indeed well-formed and valid.

Historical Footnote:

It's important to note that the behavior described above became standardized with C++98. Prior to that, the lifetime of temporaries varied based on the compiler implementation. However, as the standard matured, the behavior was uniformly defined, ensuring consistency across compilers.

以上がC で一時文字列を使用した `std::string::c_str()` の使用は安全ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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