变量在临时存储中存在多长时间?

How long does variable exist in temporary storage?

目前我正在通过 Steven Prata 和第 6 页的第 6 版 C++ Primer Plus 学习 C++。 389 我发现某事非常有趣,我想为自己澄清一下。 如果我们有这样的功能:

const std::string     &ft_add_on_sides(std::string s1, std::string s2)
{
        std::string          res;
        res = s2 + s1 + s2;
        return (s2);
}

int     main(void)
{
        std::string input = "Hello"
        std::string result = ft_add_on_sides(input, "###");
        return (0);
}

据我了解,此函数需要两个字符串对象,它们将是程序员实际传递的 副本 。并且此函数将 return const 引用一些内存地址。
但我对 return 语句感兴趣:
由于 s1s2 位于 临时存储 中,我们可以访问它们,但是当他们会被摧毁吗?这样的 return 声明不会惹上麻烦吗?
添加。因为变量可以被销毁,我还在询问它的地址。

您可以在此处阅读已接受的答案。

the return value is copied out of a local variable into the return register if necessary.

不再需要函数的栈帧,局部变量被弹出,一旦函数 returns 将无法访问,但 s2 将被复制到 return 注册.

一旦 return 语句执行,函数的参数就会在调用函数继续之前销毁。这意味着您仍然可以在 return 值表达式中使用这些参数,但是您最好 return 一个 copy 它们。

你在你的例子中写的是未定义的行为。任何事情都可能发生。通常,在调试模式下,编译器相当擅长捕获对已破坏字符串的访问,但在发布版本中,编译器不再引入代码来捕获错误。