【发布时间】:2018-11-17 16:11:24
【问题描述】:
考虑以下代码:
struct foo
{
foo(foo const&) = default; // To make sure it exists
};
foo& get_local_foo_reference()
{
foo my_local_foo;
return my_local_foo; // Return a reference to a local variable
}
int main()
{
foo my_foo = get_local_foo_reference();
}
现在每个人都会同意返回对局部变量的引用是不好的,并且会导致未定义的行为。
但在copy initialization的情况下(如上面的代码所示),参数是一个常量左值引用,所以它应该是参数的reference initialization,这样可以延长引用的生命周期。
这是有效的,还是仍然是未定义的行为?
【问题讨论】:
-
"参数是一个常量左值引用" 不,不是。这是一个
foo类型的表达式,它是一个左值表达式。没有const或&参与。
标签: c++ reference return language-lawyer lifetime