如果我们在 C++ 中有这个示例函数代码
void foo(int x) { std::cout << "foo(int)" << std::endl; }
void foo(int& x) { std::cout << "foo(int &)" << std::endl; }
是否可以通过对调用参数进行任何修改来区分要调用的函数?
如果以这些方式中的某些方式调用函数 foo:
foo( 10);
i = 10;
foo( static_cast<const int>(i));
foo( static_cast<const int&>(i));
它被称为第一个 foo 重载函数,因为它不能通过引用将 const 参数传递给非 const 参数。 但是,您将如何调用第二个 foo 重载函数? 如果我用下一种方式调用:
int i = 10;
foo( i);
它发生了一个不明确的错误,因为这两个函数对于这个参数都是有效的。
在此链接中https://stackoverflow.com/a/5465379/6717386它解释了一种解决它的方法:使用对象而不是内置类型并私有(private)化复制构造函数,因此它不能复制对象值,它必须调用第二个 foo 重载函数并通过传递对象引用。但是,内置类型有什么办法吗?我必须更改函数名称以避免重载吗?
最佳答案
关于c++ - C++ 中的函数重载按值或按引用传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38957516/