【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
原创粉丝点击