65,209
社区成员
发帖
与我相关
我的任务
分享
class A
{};
class B
{
const A& getA() const { return m_a; }
private:
A m_a;
}

const std::string& s = std::string("sssa");[/quote]
嗯,因为被引用的这个左值(object)的作用域肯定是 比 引用本身(const reference)的作用域 要大,所以,引用存活的时候,被引用左值肯定也是存活的(不考虑动态创建的对象),谈不上续命了const std::string& s = std::string("sssa");
A: 0
i = 0
~A: 1
[/quote]
我分别用VC++6.0,VS2005,VS2010试了,在VS2005和VS2010下是直接A& c = A()的,VC++6.0则不是,这个续命功能可能需要编译器支持吧[/quote]
左值引用无所谓扩展临时对象生存期。A& c = A()没给你编译错误是因为VC++有个自己人都吐槽的傻×扩展。
要么const A& c = A()要么A&& c = A(),自己看着办。
[/quote]
他应该是漏写了const,没const的话,应该编译不过的