#include<iostream>
using namespace std;
/************************************************************************
返回值是基础类型,当引用
当函数返回值为引用时
若返回栈变量
不能成为其它引用的初始值
不能作为左值使用
************************************************************************/
int getAA1()
{
int a;
a = 10;
return a;
}
//返回a的本身返回a的一个副本
int& getAA2()
{
int a;//如果返回栈上的引用会有问题
a = 10;
return a;
}
int* getAA3()
{
int a;
a = 10;
return &a;
}
int main()
{
int a1 = 0;
int a2 = 0;
a1 = getAA1();
a2 = getAA2();//如果使用int型的变量接这个返回值,把这个值10赋给a2,返回一个a的副本
int &a3 = getAA2();
//*a3 若返回栈变量 不能成为其它引用的初始值
printf("a1:%d,a2:%d,a3:%d",a1,a2,a3);
system("pause");
return 0;
}
若返回静态变量或全局变量
可以成为其他引用的初始值
即可作为右值使用,也可作为左值使用
#include<iostream>
using namespace std;
//若返回静态变量或全局变量
// 可以成为其他引用的初始值
// 即可作为右值使用,也可作为左值使用
int j1()
{
static int a = 10;
a ++ ;
return a;
}
int& j2()
{
static int a = 10;
a ++ ;
return a;
}
int main()
{
int a1 = 10;
int a2 = 20;
a1 = j1();
a2 = j2();
int &a3 = j2();
printf("a1:%d,a2:%d,a3:%d",a1,a2,a3);
system("pause");
return 0;
}
#include<iostream>
using namespace std;
/************************************************************************/
/* 函数当左值 */
/************************************************************************/
int g1()
{
static int a = 10;
a++;
return a;//返回一个值11
}
int& g2()
{
static int a = 10;
a++;
printf("a:%d\n",a);
return a;//返回变量自身A ,返回变量所表示的内存空间
}
int main()
{
//g1() = 100;//报错 左操作数必须为左值相当于 11 = 100;
g2() = 100;//相当于A = 100;函数返回值是一个引用并且当作值
g2();
//printf("a1:%d,a2:%d,a3:%d",a1,a2,a3);
int c = g2();//当做右值
system("pause");
return 0;
}