【C++基础07】引用函数返回值(引用当左值)
来源:互联网 发布:网络挂号:厦门长庚医院 编辑:程序博客网 时间:2024/06/14 14:46
C++引用使用时的难点:
当函数返回值为引用时
若返回栈变量
不能成为其它引用的初始值
不能作为左值使用
若返回静态变量或全局变量
可以成为其他引用的初始值
即可作为右值使用,也可作为左值使用
栈变量做返回值:
int getA1(){int a = 10;return a;}//若返回栈变量 不能成为其他引用变量的初始值// 返回a引用 就是返回a的本身 返回a的一个副本 10int& getA2(){int a = 10;return a; //返回引用的本质 是c++编译器帮我们取地址 也就是用一个常量指针指向了一个被释放的内存空间 但是返回值在寄存器中存放}int* getA3(){int a = 10;return &a;}void main(){int a1 = getA1(); //10的值返回出去了 一般情况下把返回值放在寄存器中int a2 = getA2();//因为引用所依附的内存空间已经被释放 int &a3 = getA2(); //a3在debug下是个乱码 release下正常 相当于存放a的地址 int *a4 = getA3();printf("a1:%d,a2:%d,a3:%d",a1,a2,a3); //*a3cout << "hello!" << endl;system("pause");return;}
静态变量做返回值:
int& j2(){static int a = 10;a++;return a;}//若返回静态变量 或者 全局变量// 可以成为其他引用的初始值// 既可作右值使用 也可作左值使用void main(){int a1 = 10;int a2 = 20;a1 = j1();a2 = j2();int &a3 = j2();cout << "hello!" << endl;system("pause");return;}
-----函数当左值:
//返回一个int变量的值 也就是11int g(){static int a = 10;a++;return a;}//返回变量本身int& g2(){static int a = 10;a++;return a;}int* g3(){static int a = 10;a++;return &a;}void main(){//g() = 100; ==》 11=100;g2() = 100; //通过 ==>a=100; //函数返回值是一个引用 并且当左值*g3() = 200; //通过 printf("%d ",*g3());//201cout << "hello!" << endl;system("pause");return;}//最主要看一个内存空间是不是一个有效的内存空间
1 0
- 【C++基础07】引用函数返回值(引用当左值)
- 引用的难点:函数返回值是引用(引用当左值)
- 引用左值(返回引用)
- 引用返回左值
- 函数的引用返回左值
- C++函数返回值的特殊情况(返回引用、非引用、引用左值)
- 给函数返回值赋值--引用返回左值
- 函数返回值为引用、非引用及引用左值的情况
- 函数引用与左值
- 常量函数、常量引用参数、常量引用返回值[C++]
- 常量函数、常量引用参数、常量引用返回值[C++]
- 引用返回函数值
- 函数返回值 返回引用
- 引用返回左值及其判断引用有效性的方法
- 关于引用的含义,使用,引用返回左值
- [第二节]C++ 引用 函数调用作为左值 用const限定引用 返回堆中变量的引用
- C++基础---有返回值类型函数(返回引用类型)
- C++——左值引用和右值引用
- JS中alert中文乱码
- 【总结】C++ 出现内存问题
- 遮盖层
- 重复记录的处理
- JEasyframe使用教程2 项目结构
- 【C++基础07】引用函数返回值(引用当左值)
- 将秒数转化为时分秒
- 输入法不见了
- jQuery插件简单示例
- 借助JRebel使Tomcat支持热部署
- 个人创业楷模:一个人,一个网站,5.75亿美元卖掉
- scrollReveal.js – 页面滚动显示动画JS
- Java7 新特性:try() 语句 即 try-with-resources
- 在TextView里面显示log