c++引用和缺省冲突

    工作中,经常要接触别人的代码。然后因为需求变更,要修改别人的代码。

    程序的函数为了获取想要的变量,可能会产生一些临时变量作为辅助。最近,因为业务的复杂化,在这个函数达到目的的同时,还想获取临时变量。这个时候,首先我想到的方法就是加一个引用型参数,然后将临时变量赋值给引用的变量。

例如:在该函数中想要获取z的值,怎么获取?

void test(int x,int y)
{
    int z = x+y;
    cout<<x<<y;
}

加一个引用变量就好了

#include <iostream>

using namespace std;

void test(int x,int y,int &n)
{
    int z = x+y;
    n= z;
    cout<<"x="<<x<<" y="<<y<<endl;
}

int main(int argc, char *argv[])
{
    int s;
    test(1,2,s);
    cout<<"s= "<<s<<endl;
    return 0;
}

如果在原源代码中,多次调用了test(int x,iny),现在加了一个参数,岂不是要把所有调用函数的地方都加一个参数?而且可能有的地方并不需要获取z值。一般这种情况下,我们很容易想到缺省函数。

void test(int x,int y,int n=0)
{
    int z = x+y;
    n= z;
    cout<<"x="<<x<<" y="<<y<<endl;
}


那是不是把缺省和引用弄一起就能达到两个目的?比如:

void test(int x,int y,int& n=0) //注意:这段代码有问题
{
    int z = x+y;
    n= z;
    cout<<"x="<<x<<" y="<<y<<endl;
}

然后就会报一个错误

 error: invalid initialization of non-const reference of type 'int&' from an rvalue of type 'int'

 void test(int x,int y,int& n=0)
                                ^

显然不能同时使用引用和缺省来达到获取临时变量,又拥有缺省函数的方便。


因为& 引用的内部实现是只读指针,所以 int& n=0 只能写成 const int &n=0 

这样的话,n就不能变,那怎么赋值,怎么获取临时变量。


那想要达到这两个目的就没办法了吗?有的,有很多办法,另写一个函数啊,继承啊之类的办法也有。

我认为最简单的,也是最接近我的直觉的是 缺省和指针。引用是只读指针,指针就可以达到目的啊!!!

#include <iostream>

using namespace std;

void test(int x,int y,int* p=NULL)
{
    int z = x+y;
    if (p!=NULL ){
       *p= z;
        cout<<"z= "<<*p<<endl;
    }
    cout<<"x="<<x<<" y="<<y<<endl;
}

int main(int argc, char *argv[])
{
    int s;
    test(1,2,&s);
    test(1,2);
    cout<<"s= "<<s<<endl;
    return 0;
}

对了,大家千万别忘了做 指针判断,不然可能要崩溃的哟!



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值