如何调用'按值调用'和'按引用调用'重载函数?

时间:2016-05-22 14:47:40

标签: c++ reference overloading lvalue

我有两个重载函数,一个是“按值调用”,另一个是“按引用调用”。

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?

2 个答案:

答案 0 :(得分:7)

因为aconst int,所以告诉编译器您不希望修改aa无法通过引用传递(仅限const&),因为如果它是引用,f可以修改它,但不允许f因为aconst

因此唯一合法的重载是传递值1 - int f(int a)

答案 1 :(得分:4)

const int类型的左值不能转换为int类型的左值(因为这会丢弃限定条件)。因此int&重载不可行,默认情况下int重载获胜。函数的参数都经过左值到右值的转换,结果与函数参数绑定。

相关问题