【发布时间】:2019-01-06 12:21:03
【问题描述】:
下面的代码合法吗?
int foo()
{
int local = 5;
int& local_ref = local;
return local_ref;
}
如果是,那么很可能会将local 的值复制到返回值之前 破坏local,但为什么呢? GCC 和 MSVC 都没有抱怨这一点,所以它可能是合法的......不是吗?
【问题讨论】:
-
它是正确的。值被复制。另一方面,返回本地引用会调用未定义的行为。通过本地引用,我的意思是
int& foo(),而不是变量local_ref。 -
您的函数返回
int,而不是int&,因此您没有返回引用。因此,您需要重新表述您的问题,例如返回函数范围变量的副本是否未定义,然后您会立即发现这不是一个真正的问题。
标签: c++ reference pass-by-value