【总结】C++引用带来的问题

Posted on Posted in 计算机4,265 views

        指针可以为空,所以一般函数参数是指针时,我们会先判断指针是否为空。和指针不同,一般认为引用肯定是存在的,所以引用作为参数时,一般不会去判断是否存在。引用真的就一定存在吗?

        在一些极为特殊的情况下,是可以的。比如下面这段代码:

#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