c++ - 选择重载引用接受函数

标签 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& 重载?

如果不能调用,编译它有什么意义?

最佳答案

how can the int& overload be selected?

使用函数指针:

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"); }

关于c++ - 选择重载引用接受函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41566041/

相关文章:

c++ - 多线程读取数据的正确性

c++ - C++ 中的字符到二进制的转换 一次两个字符以获得 16 位二进制形式

c# - 为什么我不能将 newtonsoft.Json.dll 引用添加到我的项目中?

C++:可以用具有相同参数的私有(private)构造函数重载构造函数吗?

c++ - 在不增加内存的情况下逐渐增加 cpu 使用率。想法?

c++ - 如何使用 scons 2.3 visual express 2012 构建 C++ 项目?

c++ - 为什么 const 变量必须立即初始化?

multithreading - 如何将对堆栈变量的引用传递给线程?

python - 你能在类中添加猴子补丁吗?如果没有,我如何重载一个运算符来为两个不同的类定义加法?

c++ - 错误 : overloaded 'operator<<' must be a binary operator (has 3 parameters)