C++中的函数重载按值或引用传递参数

Car*_*mez 11 c++ overloading c++11

如果我们在C++中有这个示例函数代码

void foo(int x)  { std::cout << "foo(int)"   << std::endl; }
void foo(int& x) { std::cout << "foo(int &)" << std::endl; }
Run Code Online (Sandbox Code Playgroud)

是否可以区分调用哪些函数在调用参数中进行任何修改?

如果以某些方式调用函数foo:

foo( 10);

i = 10;
foo( static_cast<const int>(i));

foo( static_cast<const int&>(i)); 
Run Code Online (Sandbox Code Playgroud)

它被称为第一个foo重载函数,因为它不能通过引用将const参数传递给非const参数.但是,如何调用第二个foo重载函数呢?如果我打电话给下一个方式:

int i = 10;
foo( i);
Run Code Online (Sandbox Code Playgroud)

它发生了一个模糊的错误,因为这两个函数对这个参数都有效.

在这个链接/sf/answers/382576561/中解释了解决它的一种方法:使用对象而不是内置类型并执行私有复制构造函数,因此它无法复制对象值它必须被称为第二个foo重载函数并通过引用传递对象.但是,内置类型有什么办法吗?我必须更改函数名称以避免重载?

Jar*_*d42 12

你可以做一个演员(函数)来选择重载函数:

static_cast<void (&)(int&)>(foo)(i);
Run Code Online (Sandbox Code Playgroud)

演示