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会延长临时对象的生命周期吗?
答案 0 :(得分:4)
您是否有机会使用Visual Studio?它允许您使用s1
的代码作为语言扩展。我相信部分代码是安全的(忽略它是否是好的做法)。
只有const引用局部变量才能延长临时的生命周期。但它永远不允许通过引用返回局部变量(除非它是静态的)。因此,您的函数f
无效。