第一点:常引用作为参数可以接收普通变量和常量
而普通引用作为参数不能接收常量
第二点:不能把常引用参数作为普通引用返回
但可以把普通引用参数作为常引用返回
第三点:如果是普通变量接收引用返回或常引用返回
因为是引用返回编译器不必复制一份建立匿名对象
但用普通变量接收时,会把匿名对象复制一份到普通变量标识的内存空间
这时对普通变量的修改无法附加到起始变量中,体现不出引用的特点
第四点:如果是引用变量接收引用返回或常引用返回
引用变量只能接收引用返回,接下来对引用变量的修改会附加到起始变量中
常引用变量既可以接收引用返回,又可以接收常引用返回
只是以后不能再对常引用变量进行修改
注:设计函数参数和返回值时,一般把参数设计成常引用
如果要返回局部变量一定设计成值类型
否则当变量占用的存储空间较小时,可以返回值类型
也可以返回引用类型,这样编译器就不用复制一份建立匿名对象
推荐返回常引用,这样无论是拿普通变量接收或者是常引用变量接收都能避免误操作
#include<iostream> using namespace std; //const int& mmax(const int& a, const int& b){ // if(a>=b)return a; // else return b; //} //int& mmax(const int& a, const int& b){ // if(a>=b)return a; // else return b; //} //const int& mmax(int& a,int& b){ // if(a>=b)return a; // else return b; //} int& mmax(int& a,int& b){ if(a>=b)return a; else return b; } //void test01(){ // int n1=10,n2=20; // int n3=mmax(n1,n2); // n3+=2; // cout<<n3<<" "<<n1<<" "<<n2<<endl; //} // //void test02(){ // const int n1=10,n2=20; // int n3=mmax(n1,n2); // n3+=2; // cout<<n3<<" "<<n1<<" "<<n2<<endl; //} void test03(){ int n1=10,n2=20; int& n3=mmax(n1,n2); n3+=2; cout<<n3<<" "<<n1<<" "<<n2<<endl; } //第一点:常引用作为参数可以接收普通变量和常量 //而普通引用作为参数不能接收常量 // //第二点:不能把常引用参数作为普通引用返回 //但可以把普通引用参数作为常引用返回 // //第三点:如果是普通变量接收引用返回或常引用返回 //因为是引用返回编译器不必复制一份建立匿名对象 //但用普通变量接收时,会把匿名对象复制一份到普通变量标识的内存空间 //这时对普通变量的修改无法附加到起始变量中,体现不出引用的特点 // //第四点:如果是引用变量接收引用返回或常引用返回 //引用变量只能接收引用返回,接下来对引用变量的修改会附加到起始变量中 //常引用变量既可以接收引用返回,又可以接收常引用返回 //只是以后不能再对常引用变量进行修改 // //注:设计函数参数和返回值时,一般把参数设计成常引用 //如果要返回局部变量一定设计成值类型 //否则当变量占用的存储空间较小时,可以返回值类型 //也可以返回引用类型,这样编译器就不用复制一份建立匿名对象 //推荐返回常引用,这样无论是拿普通变量接收或者是常引用变量接收都能避免误操作 int main(){ test03();//分别拿test01,test02,test03调用四个mmax函数 return 0; }