【发布时间】:2013-03-07 09:39:25
【问题描述】:
从ildjarn读this answer后,我写了下面的例子,看起来一个未命名的临时对象和它的引用有相同的生命周期!
- 这怎么可能?
- 是否在 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 object has the same life time as its reference
-
Lifetime of temporaries 的可能副本 / 看看我发现了什么
-
@olibre:是的,你是对的。我一定是喝醉了。
-
@olibre: You cannot.
标签: c++ reference temporary object-lifetime