return语句中的return和expression之间是否有一个序列点?

时间:2015-09-19 06:51:33

标签: c++

以下是标准的引用:

  

第二个上下文是引用绑定到临时的。该   临时引用的临时或临时的   完成对象到临时绑定的子对象   除以下规定外,在参考文件的生命周期内仍然存在。   临时绑定到构造函数中的引用成员   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;

无效?

0 个答案:

没有答案