以下是标准的引用:
第二个上下文是引用绑定到临时的。该 临时引用的临时或临时的 完成对象到临时绑定的子对象 除以下规定外,在参考文件的生命周期内仍然存在。 临时绑定到构造函数中的引用成员 ctor-initializer(§12.6.2[class.base.init])一直持续到 构造函数退出。临时绑定到a中的引用参数 函数调用(§5.2.2[expr.call])一直持续到完成 包含调用的完整表达式。
请查看代码:
#include <iostream>
using namespace std;
struct foo{const char* bar ; foo(): bar("This is foo"){} };
foo returnByValue(){ return foo(); }
const foo& returnByConstRef() { return returnByValue(); }
int main() {
std::cout<< returnByConstRef().bar <<std::endl; // is life of temp is extended in while this expression?
return 0;
}
以上程序有效吗?或者,以下语句中的 temp对象在return语句离开函数之前死掉?
return returnByValue();
如果是这样发表声明
const char*& jinjja = returnByConstRef().bar;
无效?