C++ 为什么我仍然可以访问对临时对象的引用? const std::string&f(){ std::string s=“Hello”; 返回s+s; } int main(){ std::string s=“Hello”; std::string&s1=s+s; s1+=“!”; std::cout

C++ 为什么我仍然可以访问对临时对象的引用? const std::string&f(){ std::string s=“Hello”; 返回s+s; } int main(){ std::string s=“Hello”; std::string&s1=s+s; s1+=“!”; std::cout,c++,temporary-objects,C++,Temporary Objects,您是否有机会使用Visual Studio?它允许您使用s1的代码作为语言扩展。我相信部分代码是安全的(忽略它是否是良好实践) 只有常量引用局部变量可以延长临时变量的生存期。但决不允许通过引用返回局部变量(除非它是静态的)。因此,您的函数f无效。是否有可能使用Visual Studio?它允许您使用s1的代码作为语言扩展。我相信部分代码是安全的(忽略它是否是良好的做法) 只有常量引用局部变量可以延长临时变量的生存期。但决不允许通过引用返回局部变量(除非它是静态的)。因此,您的函数f无效。仅当临时

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


只有常量引用局部变量可以延长临时变量的生存期。但决不允许通过引用返回局部变量(除非它是静态的)。因此,您的函数
f
无效。

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


只有常量引用局部变量可以延长临时变量的生存期。但决不允许通过引用返回局部变量(除非它是静态的)。因此,您的函数
f
无效。

仅当临时变量绑定到命名常量引用时才会发生生存期扩展;返回类型不起作用。
f()中没有运行时错误
因为您从未调用functionLifetime extension,只有当临时变量绑定到命名常量引用时才会发生;返回类型不起作用。
f()
没有运行时错误,因为您从未调用该函数
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();
}