我从C ++开始,我不确定一件事......
此代码是否正常或存在问题?
void foo(const std::string& data)
{
std::cout << data << std::endl;
}
foo("Hello World");
我真的不确定这一点,但我认为在调用函数foo
时,将创建临时字符串变量,然后将其引用作为参数传递,然后销毁此临时变量。因此函数foo
将尝试访问未定义行为的已删除内存。我是对的吗?
由于
答案 0 :(得分:4)
临时的生命周期通常延伸到它出现的完整表达式的结尾,通常是分号。
需要临时字符的完整表达式为foo("Hello World")
,因此临时字符串在函数调用的整个持续时间内都存在,并且一切正常。