在下面的代码中,我定义了两个重载,一个接受整数,另一个接受整数...
#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&
重载?
如果无法调用,编译它的重点是什么?
答案 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"); }