我在下面写了 c++17 代码:
class Myclass{
public:
Myclass()
{
std::cout << "ctor\n";
}
Myclass(const Myclass&)
{
std::cout << "copy ctor\n";
}
Myclass(Myclass&&)
{
std::cout << "move ctor\n";
}
int x;
};
void foo(Myclass mc)
{
std::cout << "void foo(Myclass mc)\n";
}
void foo(Myclass&& mcrr)
{
std::cout << "void foo(Myclass&& mcrr)\n";
}
int main()
{
foo(Myclass{});
}
但是,我得到了“重载 foo(Myclass) 的调用不明确”的错误。 什么是问题?我预计会调用第二个函数。
void foo(Myclass mc)
和 void foo(Myclass&& mcrr)
同样匹配。
执行第一个函数
void foo(const MyClass& mc)
,您的调用将匹配第二个foo
,因为它不需要任何转换。