1
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 是对临时对象的非常量引用,我仍然可以访问和修改它?

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

4

1 回答 1

4

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

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

于 2014-08-12T10:55:47.580 回答