String作为引用参数

时间:2015-12-03 10:56:16

标签: c++ arguments

我从C ++开始,我不确定一件事......

此代码是否正常或存在问题?

void foo(const std::string& data)
{
    std::cout << data << std::endl;
}

foo("Hello World");

我真的不确定这一点,但我认为在调用函数foo时,将创建临时字符串变量,然后将其引用作为参数传递,然后销毁此临时变量。因此函数foo将尝试访问未定义行为的已删除内存。我是对的吗?

由于

1 个答案:

答案 0 :(得分:4)

临时的生命周期通常延伸到它出现的完整表达式的结尾,通常是分号。

需要临时字符的完整表达式为foo("Hello World"),因此临时字符串在函数调用的整个持续时间内都存在,并且一切正常。