这里写目录标题
一、引发了异常: 写入访问权限冲突
"1\0"是const char类型,上述指针方式只是把result指针的指向强行允许指向该字符串,"1\0"占用的内存的数据类型仍然是const char类型且不允许修改。例如result[1] = ‘1’会报这个错误,写入访问权限冲突!
**改为char result[] = “1\0”;**不会报这个错误,result就是个数组,虽然result本质还是个指针,但是此时’1’ 和’\0’是数组内的元素,可以直接修改!
但这个局部变量作为指针或者引用类型的返回值是不行滴,因为函数一结束,这篇内存就被释放了!
正确做法是:char*result = new char[2];如此以来返回指针就可以!
引用做函数返回值
1,引用做函数返回值,返回的是局部变量:
int x = s1.getStrIndex(target);
int x = s1.getStrIndex(target);//上图发现ecx的值(函数返回的值)此时还没被释放,被赋值到了x的地址。此时确实能够正确拿到返回的值,但是还是别这样,不安全。
int &x = s1.getStrIndex(target);此时发现x能够成功引用返回值,但是执行一会之后该内存会被释放
2,直接返回局部变量,此时接受该返回值的话,不能引用接受:int & x= s1.getStrIndex(target);会报错:非常量引用的初始值必须为左值。
那什么时候引用的初始值可以为右值呢?
1,利用c++11的特性:右值引用:int && x = s1.getStrIndex(target);
2,const+左值引用:const+普通引用:const int & x = s1.getStrIndex(target);
一般考虑用第一种,不仅能节省内存,还可对值进行修改!