在C++中, 引用比指针更安全,是因为引用变量必须被初始化并且初始化后不能再引用别的对象。但是也有下面的这几种例外情况:
1)引用的对象是一个未初始化的指针
int main()
{
int* ptr;
int& ref = *ptr; //引用的是内存中一块随机值
return 0;
}
需要说明的是:使用visual studio 2015进行编译时,能发现这个问题。会提示“使用了未初始化的局部变量“ptr””这种编译错误。
不过, g++4.8.5是可以正常编译的。
2)引用的是一个返回的局部变量
int& fun()
{
int a = 10;
return a;
}
一旦fun()返回后,在栈内存上给变量a分配的空间会被回收。这种情况下对局部变量的引用会失效。