第一點:常引用作為參數可以接收普通變量和常量
而普通引用作為參數不能接收常量
第二點:不能把常引用參數作為普通引用返回
但可以把普通引用參數作為常引用返回
第三點:如果是普通變量接收引用返回或常引用返回
因為是引用返回編譯器不必復制一份建立匿名對象
但用普通變量接收時,會把匿名對象復制一份到普通變量標識的內存空間
這時對普通變量的修改無法附加到起始變量中,體現不出引用的特點
第四點:如果是引用變量接收引用返回或常引用返回
引用變量只能接收引用返回,接下來對引用變量的修改會附加到起始變量中
常引用變量既可以接收引用返回,又可以接收常引用返回
只是以后不能再對常引用變量進行修改
注:設計函數參數和返回值時,一般把參數設計成常引用
如果要返回局部變量一定設計成值類型
否則當變量占用的存儲空間較小時,可以返回值類型
也可以返回引用類型,這樣編譯器就不用復制一份建立匿名對象
推薦返回常引用,這樣無論是拿普通變量接收或者是常引用變量接收都能避免誤操作
#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; }