使用:
g++ -Wall -ansi foo.cpp
我收到了警告
foo.cpp:31:警告:引用本地变量'x'返回
来自函数:
int &bar(int x) {
return x;
}
但是,从文件中删除该函数,我得不到以下函数的警告:
int &get_max(int x, int y) {
return x > y ? x : y;
}
为什么编译器允许这样做?
答案 0 :(得分:1)
它看起来像一个bug,警告是不一致的,如果我们在gcc 5.1启用优化,它确实会遇到这种情况:
warning: function may return address of local variable [-Wreturn-local-addr]
return x > y ? x : y;
^
虽然没有优化gcc misses it。
所以最好的办法是提交bug report。如果他们不相信这是一个错误或者无法修复它,那么至少会有其他人有同样问题的参考。