jest następujący kod C++ dobrze wykształcona:std :: string :: c_str() i uzupełnienia tymczasowe
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());
Problem mam z nim jest to, że po utworzeniu tymczasowego obiektu std :: string i biorąc wskaźnik c_str(), nic nie zapobiega zniszczeniu obiektu std :: string (a może się mylę?). Czy możesz wskazać mi standard, jeśli mimo wszystko kod jest OK. Działa, gdy testuję za pomocą g ++.
Czy możesz podać wskazówkę dotyczącą standardu C++ 03 lub C++ 11, proszę? – user1095108
Czas życia tymczasowy zdefiniowany jest w § 12.2. (Sekcja 12 to zatytułowana "Specjalne funkcje użytkownika", która nie jest dokładnie taka, na jakiej spodziewałbyś się odszukać cały czas istnienia tymczasowych, ale to właśnie tam jest.) –
@ user1095108 i czas życia argumentów funkcji można uzyskać z § 3.2.2 i §3.7.2 w standardzie C++ 03. – juanchopanza