以下代码会引发未定义行为。
int& foo()
{
int bar = 1234;
return bar;
}
使用g++会发出警告:
warning: reference to local variable ‘bar’ returned [-Wreturn-local-addr]
clang++也一样:
warning: reference to stack memory associated with local variable 'bar' returned [-Wreturn-stack-address]
为什么这不是编译错误(忽略-Werror
)?
是否存在可以返回本地变量引用的情况是有效的?
编辑正如指出的那样,规范要求此代码可编译。那么,为什么规范不禁止这样的代码?