Ist der folgende C++ Code wohlgeformt:std :: string :: c_str() und Provisorien
void consumer(char const* p)
{
std::printf("%s", p);
}
std::string random_string_generator()
{
// returns a random std::string object
}
consumer(random_string_generator().c_str());
Das Problem habe ich mit ihm ist, dass nach dem temporären std :: string-Objekt erstellen und unter der Zeiger c_str(), nichts verhindert, dass das std :: string-Objekt zerstört wird (oder vielleicht liege ich falsch?). Kannst du mich bitte auf den Standard hinweisen, wenn der Code trotz allem OK ist. Es funktioniert, wenn ich mit g ++ teste.
können Sie einen Hinweis in Bezug auf die C++ 03 oder die C++ 11 Standard bitte geben? – user1095108
Die Lebensdauer eines Temporären ist in §12.2 definiert. (Abschnitt 12 ist mit dem Titel "Special Member-Funktionen", die nicht genau dort ist, wo Sie erwarten würden, für die Lebensdauer der Provisorien zu suchen, aber das ist, wo es ist.) –
@ user1095108 und Lebensdauer der Funktion Argumente können aus § erhalten werden 3.2.2 und §3.7.2 in der C++ 03 Standard. – juanchopanza