Je suis nouveau à C++ et a couru dans la suite soi-disant bug, mais en quelque sorte mon programme fonctionne très .. Voici le codePourquoi la valeur de retour de la file d'attente: avant() valide après la file d'attente :: pop()
#include<iostream>
#include<queue>
#include <string>
int main()
{
string s ("cat");
queue<string> _queue;
_queue.push(s);
string & s1 = _queue.front();
_queue.pop();
// at this time s1 should become invalid as pop called destructor on s
std::cout << s1 << std::endl;
return 0;
}
Cela fonctionne simplement, même si s1 est une référence à un objet invalide. Existe-t-il un moyen d'affirmer que s1 se réfère vraiment à un objet invalide?
Ceci est un manuel [undefined behavior] (http://en.wikipedia.org/wiki/Undefined_behavior), qui par définition n'est pas "détectable" à l'exécution, car vous êtes déjà en UB-land. – ildjarn
Ty pour l'excellent lien vers UB. – Jimm
Voir [La mémoire d'une variable locale peut-elle être accédée en dehors de sa portée?] (Http://stackoverflow.com/a/6445794/597607) –