工作中,经常要接触别人的代码。然后因为需求变更,要修改别人的代码。
程序的函数为了获取想要的变量,可能会产生一些临时变量作为辅助。最近,因为业务的复杂化,在这个函数达到目的的同时,还想获取临时变量。这个时候,首先我想到的方法就是加一个引用型参数,然后将临时变量赋值给引用的变量。
例如:在该函数中想要获取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;
}
对了,大家千万别忘了做指针判断,不然可能要崩溃的哟!