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
    }
    
posted on 2020-10-22 12:59  海鱼啊  阅读(93)  评论(0)    收藏  举报