没有返回对局部变量的引用的编译器警告
No compiler warning for returning a reference to local variable
使用:
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 会错过它。
因此,最好的办法是提交错误报告。如果他们不相信这是一个错误或不会修复它,那么至少会有其他人有相同问题的参考。
相关文章:
- 隐式重新解释引用时强制转换,没有警告/错误
- 警告 C4101 未引用的局部变量
- 链接时突然收到maxrregcount警告和未定义的引用错误
- 警告:返回对临时 - 奇怪情况的引用(对 Rvalue 的澄清)
- 是否有将引用返回到临时引用的C++警告?
- 为什么 ++ 运算符触发器返回对局部变量警告的引用
- C++ 当容器在使用前被破坏/修改时发出警告(通过引用元素或迭代器使用)
- 是否有任何C++编译器可以发出悬而未决的引用警告?
- 警告#13212:引用需要堆栈对齐功能的EBX
- 使用引用不会导致有关未定义行为的警告
- 三元运算符:编译器不发出局部变量警告的返回引用
- 为什么 C++ 编译器不警告返回对局部变量的引用
- 模板类型推导警告返回对本地临时对象的引用
- 为什么 g++ 警告返回对临时的引用
- 返回对函数参数的引用时没有 clang 警告
- 尝试将 std::vector<std::p air<T, U>> 转换为其左值引用时收到 VS 编译器警告 C4239
- GCC 关于隐式取消引用的警告
- 警告-未引用的内联函数已被删除
- 如何在没有编译器警告的情况下返回对空字符串的 const 引用?
- 没有返回对局部变量的引用的编译器警告