C++中,引用作为函数形参时的问题
有以下两个函数,分别是求两个数中的最大值和3个数中的最大值,二者都使用引用作为形参,并且后面的函数调用了前面的函数。floatmax(float&m,float&n){i...
有以下两个函数,分别是求两个数中的最大值和3个数中的最大值,二者都使用引用作为形参,并且后面的函数调用了前面的函数。
float max(float &m,float &n)
{
if(m>=n)
return m;
else
return n;
}
float max(float &x,float &y,float &z)
{
return max(max(x,y),z);
}
为什么第二个函数会报错:error C2665: 'max' : none of the 2 overloads can convert parameter 1 from type 'float'
好像是说第一个参数变成了实型,而不是实型的引用。但是如果将第二个函数改成下面的形式,就可以了:
float max(float &x,float &y,float &z)
{
float t=max(x,y);
return max(t,z);
}
这是为什么? 展开
float max(float &m,float &n)
{
if(m>=n)
return m;
else
return n;
}
float max(float &x,float &y,float &z)
{
return max(max(x,y),z);
}
为什么第二个函数会报错:error C2665: 'max' : none of the 2 overloads can convert parameter 1 from type 'float'
好像是说第一个参数变成了实型,而不是实型的引用。但是如果将第二个函数改成下面的形式,就可以了:
float max(float &x,float &y,float &z)
{
float t=max(x,y);
return max(t,z);
}
这是为什么? 展开
1个回答
展开全部
max(x,y) 的返回值是个临时变量,不能被用在按引用传递的参数上……
你的这两个函数都不会改动参数的值,何必按引用传递?
你的这两个函数都不会改动参数的值,何必按引用传递?
追问
非常感谢!
如果将max的形参改成float型,如下:
float max(float m,float n)
{
if(m>=n)
return m;
else
return n;
}
那么在调用时就可以用return max(max(x,y),z);的形式了是吗?
也就是说函数返回的临时变量不能传递给引用,但可以传递给具体的对象?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询