C++設計參數和返回值,什么時候用引用參數(或引用返回值),什么時候用常引用參數(或常引用返回值)?


第一點:常引用作為參數可以接收普通變量和常量
普通引用作為參數不能接收常量

第二點:不能把常引用參數作為普通引用返回
可以把普通引用參數作為常引用返回

第三點:如果是普通變量接收引用返回或常引用返回
因為是引用返回編譯器不必復制一份建立匿名對象
但用普通變量接收時,會把匿名對象復制一份到普通變量標識的內存空間
這時對普通變量的修改無法附加到起始變量中,體現不出引用的特點

第四點:如果是引用變量接收引用返回或常引用返回
引用變量只能接收引用返回,接下來對引用變量的修改會附加到起始變量中
常引用變量既可以接收引用返回,又可以接收常引用返回
只是以后不能再對常引用變量進行修改

注:設計函數參數和返回值時,一般把參數設計成常引用
如果要返回局部變量一定設計成值類型
否則當變量占用的存儲空間較小時,可以返回值類型
也可以返回引用類型,這樣編譯器就不用復制一份建立匿名對象
推薦返回常引用,這樣無論是拿普通變量接收或者是常引用變量接收都能避免誤操作

#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;
} 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM