Maison > développement back-end > C++ > le corps du texte

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
Libérer: 2024-10-26 10:25:03
original
438 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!