我有两个重载函数,一个是“按值调用”,另一个是“按引用调用”。
int f (int a)
{
//code
}
int f (int &a)
{
//code
}
但是如果我通过const int
,它会调用“按值传递”功能,为什么?
const int a=3;
f(a);//calls the call by value function.Why?
答案 0 :(得分:7)
因为a
是const int
,所以告诉编译器您不希望修改a
。 a
无法通过引用传递(仅限const&
),因为如果它是引用,f
可以修改它,但不允许f
因为a
是const
。
因此唯一合法的重载是传递值1 - int f(int a)
。
答案 1 :(得分:4)
const int
类型的左值不能转换为int
类型的左值(因为这会丢弃限定条件)。因此int&
重载不可行,默认情况下int
重载获胜。函数的参数都经过左值到右值的转换,结果与函数参数绑定。