После прочтения this answer от ildjarn, я написал следующий пример, и похоже, что неназванный временный объект имеет такое же время жизни, как и его ссылка!Ссылка на неназванный временный объект (время жизни)
- Как это возможно?
- Он указан в стандарте C++?
- Какая версия?
код Источник:
#include <iostream> //cout
#include <sstream> //ostringstream
int main()
{
std::ostringstream oss;
oss << 1234;
std::string const& str = oss.str();
char const* ptr = str.c_str();
// Change the stream content
oss << "_more_stuff_";
oss.str(""); //reset
oss << "Beginning";
std::cout << oss.str() <<'\n';
// Fill the call stack
// ... create many local variables, call functions...
// Change again the stream content
oss << "Again";
oss.str(""); //reset
oss << "Next should be '1234': ";
std::cout << oss.str() <<'\n';
// Check if the ptr is still unchanged
std::cout << ptr << std::endl;
}
Исполнение:
> g++ --version
g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-54)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
> g++ main.cpp -O3
> ./a.out
Beginning
Next should be '1234':
1234
Тот факт, что ссылки 'const' продлевают срок жизни временных рядов, должны быть покрыты справедливо в вашей книге на C++. –
Вы должны найти свой ответ, если просто попробуете искать в Интернете фразу, которую вы использовали: _temporary объект имеет тот же срок службы, что и его reference_ –
возможный дубликат [Время жизни временных] (http://stackoverflow.com/questions/4214153/lifetime of-temporaries)/посмотреть, что я нашел –