C++学习之引用
语法: 数据类型 &别名 = 原名;
int a = 10;
int &b = a;
引用的注意事项:
1、引用必须要初始化
2、引用初始化之后,就不能在更改了。
int a = 10;
int &b = a;
int c = 20;
b = c;//这里是进行赋值操作,而不是更改引用
// int &b = c ;//错误的
引用做函数参数
作用:使用引用作为函数的形参,当形参发生改变之后,它也会将实参也进行修改
优点:可以代替指针修饰实参
#include<iostream>
using namespace std;
#include<string>
void swap(int& a, int& b)//使用引用来进行传值
{
int temp = a;
a = b;
b = temp;
}
int main()
{
/*
案例描述:引用
语法: 数据类型 &别名 = 原名;
*/
int a = 10;
int b = 20;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "使用引用传值后的数据:" << endl;
swap(a, b);
cout << "a = " << a << endl;
cout << "b = " << b << endl;
system("pause");
return 0;
}
结果
引用做函数返回值
注意事项:
1、不要返回局部变量的引用
int& test()
{
int a = 100;
return a;
}
int main()
{
int& res = test();//不要返回局部变量的引用
cout << "res = " << res << endl; //能够返回正确的值,是因为编译器自动保存的
cout << "res = " << res << endl; //值丢失
cout << "res = " << res << endl; //值丢失
cout << "res = " << res << endl; //值丢失
结果
2、函数的调用可以做为左值。
格式:函数 = 值;
test1() = 1000;
代码
#include<iostream>
using namespace std;
#include<string>
int& test1()
{
static int b = 100; //静态变量,存放在全局区
return b;
}
int main()
{
//函数的调用可以做为左值。
int& ref = test1();
cout << "ref = " << ref << endl; //值存在
test1() = 1000; // 函数的调用可以做为左值。
cout << "ref = " << ref << endl; //值存在
system("pause");
return 0;
}
结果:
引用的本质
本质:引用的本质在C++内部实现是一个指针常量
{ int a = 10;int & b =a; } 等价于
{ int a = 10; int * const b = &a;}
常量引用
作用:常量引用主要来修饰函数的形参,防止误操作
在函数形参列表中,加入const修饰形参,防止形参改变实参。
int& a = 10;//错误的写法
const int& a =10; //正确的语句(相当于:int temp =10; const int &a = temp;)