指针可以为空,所以一般函数参数是指针时,我们会先判断指针是否为空。和指针不同,一般认为引用肯定是存在的,所以引用作为参数时,一般不会去判断是否存在。引用真的就一定存在吗?
在一些极为特殊的情况下,是可以的。比如下面这段代码:
#include <iostream> #include <string> using namespace std; const string& fun() { const string& a = string("123123"); return a; // string("123123"); } int main(){ string& s = fun(); cout<<s<< endl; return 0; }
main函数中的引用s,就是有问题的。函数fun中利用string()构造了一个string临时对象,然后定义引用a指向该临时对象。最后fun返回了引用,由于作用域的影响,fun函数返回后string临时对象会被释放。
虽然fun返回了引用,但是在main中,该引用s并不是合法的。所以cout时会运行错误,提示段错误。
转载标明出处:https://blog.evanxia.com/2016/09/1032