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

时间:2018-01-08 16:53:37

标签: c++ copy temporary-objects return-by-reference

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

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);
}

据我所知,这个函数期待两个字符串对象,它们将是那些程序员实际传递的副本。并且此函数将返回const引用到某个内存地址 但我对回复声明感兴趣:
由于 s1 s2 位于临时存储空间中,我们可以访问它们,但什么时候会被销毁?我不会因为这样的退货声明而陷入困境吗? 加。因为变量可以被销毁,我仍然要求它的地址。

2 个答案:

答案 0 :(得分:2)

在调用函数继续之前,return语句执行后,函数的参数将被销毁。这意味着您仍然可以在return值表达式中使用这些参数,但最好还是返回副本

您在示例中所写的内容是“未定义的行为”。任何事情都可能发生。通常,在调试模式下,编译器在捕获对已销毁字符串的访问方面相当不错,但在发布版本中,编译器不再引入代码来捕获错误。

答案 1 :(得分:-1)

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

Return value of function

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

功能'不再需要堆栈帧,局部变量会弹出,一旦函数返回就无法访问,但s2将被复制到返回寄存器中。