C++之引用
引用
- 基本用法:
int main(){
int a = 10;
//1、引用必须初始话
//int &b;错误,必须要初始化
int &b = a;
//2、引用在初始化后不可以改变
int c = 20;
b = c;//赋值操作,即a=b=c=20,而不是更改引用,即a不改变
cout << ...
}
- 引用做函数参数
用引用传递能够通过形参修改实参
void swap(int &a,int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
int main(){
int c,d;
swap(c,d);//即能修改了cd,而不用指针,cd名为ab也是可以,swap引用别名和这个名可以相同
}
- 引用做函数的返回值
//不要返回局部变量的引用,如下,返回a的别名
int& test()
{
int a = 10;
//static int a = 10;则成立,因为静态变量在全局区,程序结束后由系统释放,则可以返回局部变量的引用
return a;//a在函数结束时已经释放
}
int main()
{
int &ref = test();//意思想把a的别名赋给别名ref,即ref是a的别名
cout << "ref = "<< ref << endl;
//若为static
test() = 1000;//如果函数返回值是引用,这个函数调用可以作为左值,做到修改a=1000
}
-
引用的本质
引用的本质就是一个指针常量
引用一旦初始化后,就不可以发生改变
void func(int & ref) { ref = 100;//此赋值过程中,由于是引用,所以为*ref = 100;(系统自动) } int main() { int a = 10; //自动转化为 int *const ref = &a;是一个指针常量,指向为a不可改变,即引用不可改 int & ref = a; ref = 20;//内部发现是引用,即*ref = 20; cout << "a:" << a << endl; cout << "ref:" << ref << endl;//输出时自动转换为*ref func(a); return 0; } -
常量引用
防止被修改
void showValue(const int &val) { val = 100;//可以修改到a里面去 cout << "val = " << val << endl; } int main(){ //常量引用,用来修饰形参,防止修改 //int &ref = 10;引用本身需要一个合法内存 error! //这句话正确,编译器优化代码:int temp = 10; const int & ref = temp; const int &ref = 10; //ref = 100,加入const后不可以修改变量 error! int a = 10; showValue(a);//引用时,参数传入const,防止修改到a }
浙公网安备 33010602011771号