ホームページ  >  記事  >  バックエンド開発  >  記事の内容に適した質問ベースのタイトルをいくつか示します。 **直接的かつ集中的:** * **一時文字列に対して `std::string.c_str()` を呼び出すと未定義の動作が発生するのはなぜですか?** * **

記事の内容に適した質問ベースのタイトルをいくつか示します。 **直接的かつ集中的:** * **一時文字列に対して `std::string.c_str()` を呼び出すと未定義の動作が発生するのはなぜですか?** * **

DDD
DDDオリジナル
2024-10-26 10:25:03439ブラウズ

Here are a few question-based titles that fit the content of your article:

**Direct and Focused:**

* **Why Does Calling `std::string.c_str()` on a Temporary String Lead to Undefined Behavior?**
* **How to Safely Use `std::string.c_str()` with Temporary

一時文字列で std::string.c_str() を呼び出す

C では、一時オブジェクトは、それが作成された完全な表現。指定されたコードの行 const char* cStr = getString().c_str(); getString() の戻り値から一時的な std::string オブジェクトを作成します。ただし、この一時ファイルは、cStr ポインターが使用できる前に破棄されます。

これを修正するには、一時ファイルを名前付き変数に格納するか、const lvalue-reference または rvalue-reference にバインドします。例:

<code class="cpp">std::string s = getString();      // Extended lifetime
const char* cStr1 = s.c_str();
std::cout << cStr1 << std::endl; // Safe

const std::string& s2 = getString();  // Const lvalue-reference
const char* cStr2 = s2.c_str();
std::cout << cStr2 << std::endl; // Safe</code>

または、一時ファイルが破棄される前にポインタを使用することもできます:

<code class="cpp">std::cout << getString().c_str() << std::endl;  // Temporary used immediately</code>

以上が記事の内容に適した質問ベースのタイトルをいくつか示します。 **直接的かつ集中的:** * **一時文字列に対して `std::string.c_str()` を呼び出すと未定義の動作が発生するのはなぜですか?** * **の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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