关于函数返回值为左值的理解

左值:可以在等号的左边或者右边出现的值。

#include <iostream>
 
using namespace std;
 
/*
若返回静态变量或全局变量
可以成为其他引用的初始值
即可作为右值使用,也可作为左值使用
*/
int getA()
{
    static int a =10 ;
    a ++ ;
    return a;
}
 
int* getA2()
{
    static int a =20 ;
    a++;
    return &a;
}
 
int& getA3()
{
    static int a =30;
    a ++;
    printf("a:%d\n",a);
    return a;
}
 
int main()
{
    
    int cc = getA();
    printf("cc:%d\n",cc);
 
    int*w = getA2();
    printf("w:%d\n",*w);
 
    int t = getA3();//a:31
    printf("t:%d\n",t);
 
    //getA() = 100;  //左操作数必须为左值 ====》 11=100
 
    //getA2() = (int*)100; ////左操作数必须为左值
      
    getA3() = 100;//a:32
    getA3();//a:101
 
    system("pause");
    return 0;
}

getA3()的返回值为对象的取地址符,所以可以直接进行赋值等操作,所以可以作为左值。

posted @ 2019-08-12 16:55  郭怡柔  阅读(1294)  评论(0)    收藏  举报