为什么我仍然可以访问临时对象的引用?

时间:2014-08-12 10:52:52

标签: c++ temporary-objects

const std::string& f(){
    std::string s = "Hello";
    return s + s;
}
int main() {
    std::string s = "Hello";
    std::string& s1 = s + s;
    s1 += "!";
    std::cout << f();
}

我对我编写的这段代码有几个问题。

为什么我仍然可以访问和修改s1,即使它是对临时对象的非const引用?

为什么f会给我一个运行时错误?我以为const会延长临时对象的生命周期吗?

1 个答案:

答案 0 :(得分:4)

您是否有机会使用Visual Studio?它允许您使用s1的代码作为语言扩展。我相信部分代码是安全的(忽略它是否是好的做法)。

只有const引用局部变量才能延长临时的生命周期。但它永远不允许通过引用返回局部变量(除非它是静态的)。因此,您的函数f无效。

相关问题