没有编译器警告返回对局部变量的引用

时间:2015-04-26 01:04:56

标签: c++ g++ compiler-warnings

使用:

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;
}

为什么编译器允许这样做?

1 个答案:

答案 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。如果他们不相信这是一个错误或者无法修复它,那么至少会有其他人有同样问题的参考。