选择过载到引用接受函数

时间:2017-01-10 09:59:49

标签: c++ reference overloading

在下面的代码中,我定义了两个重载,一个接受整数,另一个接受整数...

#include <stdio.h>

void foo(int)  { printf("foo(int)\n"); }
void foo(int&) { printf("foo(int&)\n"); }

然后我试图调用两个重载

int main(int argc, const char *argv[]) {
    foo(3);     // Calls foo(int)
    int x = 3;
    foo(x);     // <--- compilation error (ambiguous overload)
    int& y = x;
    foo(y);     // <--- still ambiguous
    return 0;
}

问题是......如何选择int&重载?

如果无法调用,编译它的重点是什么?

1 个答案:

答案 0 :(得分:3)

  

如何选择int&重载?

使用函数指针:

using fptr = void (*)(int&);
fptr f = foo;
int i;
f(i);

对于那些在这里徘徊的人,寻找一种方法来合理地重载左值和右值,解决方案是使用右值参考:

void foo(int&&) { printf("foo(int&&)\n"); }
void foo(int&)  { printf("foo(int&)\n"); }