以下代码调用未定义的行为。 int& foo() { int bar = 1234; return bar; } g ++发出警告: 警告:对返回的局部variables“bar”的引用[-Wreturn-local-addr] 铿锵++也是: 警告:返回与本地variables“bar”相关联的堆栈内存的引用[-Wreturn-stack-address] 为什么这不是一个编译错误(忽略 – -Werror )? 有没有情况下返回一个本地变种的ref是有效的? 编辑正如所指出的,规范要求这是可编译的。 那么,为什么规范不禁止这样的代码呢?