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

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

DDD
DDDoriginal
2024-10-26 10:25:03439parcourir

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

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn