Maison > Article > développement back-end > Voici quelques titres basés sur des questions qui correspondent au contenu de votre article : **Direct et ciblé :** * **Pourquoi l'appel de `std::string.c_str()` sur une chaîne temporaire entraîne-t-il un comportement non défini ?** * **
Appel de std::string.c_str() sur une chaîne temporaire
En C , un objet temporaire est détruit à la fin du pleine expression dans laquelle il a été créé. Dans le code donné, la ligne const char* cStr = getString().c_str(); crée un objet std::string temporaire à partir de la valeur de retour de getString(). Cependant, ce temporaire est détruit avant que le pointeur cStr puisse l'utiliser.
Pour résoudre ce problème, vous pouvez soit stocker le temporaire dans une variable nommée, soit le lier à une référence const lvalue ou rvalue-reference. Par exemple :
<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>
Vous pouvez également utiliser le pointeur avant que le temporaire ne soit détruit :
<code class="cpp">std::cout << getString().c_str() << std::endl; // Temporary used immediately</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!