3
所以,我有这两个功能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
的引用。 我的编译器(g ++通过MinGW,如果有区别)只是在工作中睡觉?有没有关于引用使参照物超出范围的内容?或者是我的参考语法不好?
非常感谢!
但你也不回'knuckles'一个参考,你回来'这可能很容易地被分配到非chuckles' - 本地参考。 – Nick 2012-04-11 16:14:05
你有一个错误的方法:你的编译器通过指出'pointy'中的问题来帮助你。这不是必需的。你已经成功地欺骗了它在'ref'中看不到问题。 – Mat 2012-04-11 16:15:03
编译器不需要诊断任何这些错误。感谢它甚至捕获了其中一个。 (它没有认出'ref'中的错误,因为你在另一个变量里走私它 – 2012-04-11 16:15:23