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)
| 归档时间: |
|
| 查看次数: |
1887 次 |
| 最近记录: |