今天在看书时写了这样一个函数:
#include
int& fn(int i)
{
int a = i;
return a;
}
void main()
{
int b = 2,c;
c = fn(b);
}
编译通过了可是被警告了,想了一下还是和作用域有关。
就上面这个函数来说,对于返回引用的函数fn(),未将a的值赋给一个临时变量,仅仅是将a的地址传递给了调用函数,用调用函数顺着地址找到了a的值并将这个值赋给了c。但是,fn()中的a的作用域在函数结束时结束,在正常情况下应该是找一个作用域尚未结束的变量的地址。故编译器会给一个警告。
但我还是有些不懂,作用域结束的变量编译器会给于怎样的处理,是收回空间彻底销毁,还是待程序结束全部后再一起回收,或是别的处理方法。还请大侠指教。