引用定义
对变量明取别名,两种任何一个值变化,另外一个跟着变化
int a = 10;
int& b = a;
#include<iostream>
using namespace std;
int main()
{
int a = 10;
int& b = a;
cout << a << endl;
cout << b << endl;
int c = 20;
b = c;
cout << a << endl;
cout << b << endl;
return 0;
}
引用传参
可以在函数内部改变实参
#include<iostream>
using namespace std;
void test(int& a, int& b)
{
int temp;
temp = b;
b = a;
a = temp;
}
int main()
{
int a=10 ;
int b = 20;
test(a, b);
cout << a << endl;
cout << b << endl;
return 0;
}
引用做函数返回值
1.不要返回局部变量的引用,函数调用完成后栈区已经将数据自动回收了;
2.引用函数静态变量作为返回值,静态变量存放在全局区,全局区上的数据在程序结束后系统释放
3.如果函数的返回值是引用,这个函数调用可以作为左值
#include<iostream>
using namespace std;
int& test()
{
int a=10;
return a; //不要返回局部变量的引用
}
int& test1()
{
static int a = 10; //静态变量存放在全局区,全局区上的数据在程序结束后系统释放
return a;
}
int main()
{
int& ref= test();
cout << ref << endl; //10 编译器做了一次保留
cout << ref << endl; //2021497224 乱码,这时栈区已经将数据自动回收了
int& ref1 = test1();
cout << ref1 << endl;
test1() = 1000; //如果函数的返回值是引用,这个函数调用可以作为左值
cout << ref1 << endl;
return 0;
}
结果:
10
2021497224
10
1000
引用的本质
本质:引用的本质在C++内部实现一个指针常量
int &别名 = 原名 转换为: int * const 别名 = &原名
指针常量是指针指向不可改,也说明为什么引用不可更改
int& ref= a;
int& ref = b; //报错
常量引用
常用应用后,此引用变量值不可修改,但原变量可以修改
#include<iostream>
using namespace std;
int main()
{
int a = 10;
const int& ref= a;
//ref= 100; 或报错
a = 100;
cout << a << endl;
cout << ref << endl;
return 0;
}
形参的常数引用也同理
void printValue(const int &val)
{
//val = 1000;//不可修改,修改时会报错
cout << "val = " << val << endl;
}