编译器警告 re:对局部变量的引用
compiler warnings re: references to local variables
所以,我有这两个函数ref()
和pointy()
分别创建一个本地引用和指向本地定义的int的指针:
#include <iostream>
int& ref() {
int knuckles = 6;
int &chuckles = knuckles;
return chuckles;
};
int* pointy() {
int buckles = 8;
return &buckles;
};
int main(int argc, char **argv) {
int a = ref(), *b = pointy();
int c = 14, d = 20;
std::cout << a << ' ' << *b << ' ' << c+d;
};
代码编译得很好,并且给出了有关返回局部变量 buckles
地址的警告,但我担心的是它没有说明ref()
返回对knuckles
的引用。我的编译器(通过 MinGW 的 g++,如果它有所作为)只是在工作上睡觉吗?引用是否有一些东西可以防止引用超出范围?还是我的参考语法不好?
感谢!
您的两个测试用例不是平行的。此程序:
#include <iostream>
int& ref() {
int knuckles = 6;
return knuckles;
};
int* pointy() {
int buckles = 8;
return &buckles;
};
int main(int argc, char **argv) {
int a = ref(), *b = pointy();
int c = 14, d = 20;
std::cout << a << ' ' << *b << ' ' << c+d;
};
生成以下警告:
$ g++ -O4 -std=c++0x x.cc -o x
x.cc: In function ‘int& ref()’:
x.cc:4:7: warning: reference to local variable ‘knuckles’ returned [enabled by default]
x.cc: In function ‘int* pointy()’:
x.cc:9:9: warning: address of local variable ‘buckles’ returned [enabled by default]
相关文章:
- 将引用分配给局部变量,如果局部变量超出范围,它会超出范围吗?
- 返回对局部变量 - C++ 的引用
- 警告 C4101 未引用的局部变量
- 现代编译器会优化只引用对象子集的局部变量吗
- 右值引用和局部变量的移动
- 结构数组 - 未引用的局部变量
- 返回对局部变量的引用是否正常工作?
- 为什么 ++ 运算符触发器返回对局部变量警告的引用
- 三元运算符:编译器不发出局部变量警告的返回引用
- 为什么 C++ 编译器不警告返回对局部变量的引用
- 变量循环范围会导致返回局部变量的地址引用
- 通过引用返回局部变量
- 为什么我得到未引用的局部变量
- 返回由引用指定的引用局部变量
- 返回静态局部变量作为引用
- 没有返回对局部变量的引用的编译器警告
- 为什么在这段代码中返回对局部变量的引用
- 引用与设置局部变量
- 通过引用参数将局部变量分配给
- 捕获和调试对移动lambda内部局部变量引用的无效使用