C++17中重载函数的模糊错误[重复]

问题描述 投票:0回答:1

我在下面写了 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) 的调用不明确”的错误。 什么是问题?我预计会调用第二个函数。

c++ function c++17 overloading ambiguous
1个回答
1
投票

void foo(Myclass mc)
void foo(Myclass&& mcrr)
同样匹配。

执行第一个函数

void foo(const MyClass& mc)
,您的调用将匹配第二个
foo
,因为它不需要任何转换。

演示

© www.soinside.com 2019 - 2024. All rights reserved.