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