Heim  >  Artikel  >  Backend-Entwicklung  >  Hier sind einige fragenbasierte Titel, die zum Inhalt Ihres Artikels passen: **Direkt und fokussiert:** * **Warum führt der Aufruf von „std::string.c_str()“ für eine temporäre Zeichenfolge zu undefiniertem Verhalten?** * **

Hier sind einige fragenbasierte Titel, die zum Inhalt Ihres Artikels passen: **Direkt und fokussiert:** * **Warum führt der Aufruf von „std::string.c_str()“ für eine temporäre Zeichenfolge zu undefiniertem Verhalten?** * **

DDD
DDDOriginal
2024-10-26 10:25:03439Durchsuche

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

Aufruf von std::string.c_str() für einen temporären String

In C wird ein temporäres Objekt am Ende zerstört vollen Ausdruck, in dem es geschaffen wurde. Im angegebenen Code ist die Zeile const char* cStr = getString().c_str(); Erstellt ein temporäres std::string-Objekt aus dem Rückgabewert von getString(). Dieses temporäre Element wird jedoch zerstört, bevor der cStr-Zeiger es verwenden kann.

Um dies zu beheben, können Sie das temporäre Element entweder in einer benannten Variablen speichern oder es an eine konstante L-Wert-Referenz oder R-Wert-Referenz binden. Zum Beispiel:

<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>

Alternativ können Sie den Zeiger verwenden, bevor das Provisorium zerstört wird:

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

Das obige ist der detaillierte Inhalt vonHier sind einige fragenbasierte Titel, die zum Inhalt Ihres Artikels passen: **Direkt und fokussiert:** * **Warum führt der Aufruf von „std::string.c_str()“ für eine temporäre Zeichenfolge zu undefiniertem Verhalten?** * **. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn