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

No compiler warning for returning a reference to local variable

本文关键字:引用 警告 编译器 局部变量 返回      更新时间:2023-10-16

使用:

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

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

它看起来像一个错误,警告不一致,如果我们在 gcc 5.1 中打开优化,它确实会捕获这种情况:

warning: function may return address of local variable [-Wreturn-local-addr]
 return x > y ? x : y;
                    ^

而没有优化 GCC 会错过它。

因此,最好的办法是提交错误报告。如果他们不相信这是一个错误或不会修复它,那么至少会有其他人有相同问题的参考。