将函数与临时绑定的引用返回给const ref

时间:2017-05-19 09:44:38

标签: c++ reference return-type

我是对的,这是(摘自this GotW):

string f() { return "abc"; }

void g() {
    const string& s = f();
    cout << s << endl;    // can we still use the "temporary" object?
}

完全没问题,但这根本不行:

const string& foo() { string x{"abc"}; return x; }
void bar() {
    const string& y = foo();
}

为什么会有所不同?可以说“临时的生命周期不会扩展到函数调用(即使绑定到const ref)”吗? 或者是什么解释,为什么第一个是好的,但不是第二个?

1 个答案:

答案 0 :(得分:2)

第一个很好,因为返回的值(这是一个临时的)直接绑定到const的引用,然后临时的生命周期延长到引用的生命周期。

请注意,在第二种情况下没有临时值,x是一个局部变量,当它离开函数时将被销毁,然后该函数将始终返回一个悬空引用;该引用用于初始化y,但没有任何变化,y也将是一个悬空引用。