c++ - 为什么下面的代码会出错(关于重载解析)

标签 c++ overloading

<分区>

在 gcc-4.8.1 中给出以下代码

struct Base
{
};

struct Derive : private Base
{
};

void fn(Base, int);

struct Conv
{
    operator Base() const;
    operator Derive();
};

int main()
{
    Conv c;
    fn(c, 0);
    return 0;
}

当我给出上面的代码时,我得到了一个错误。我认为编译器会选择 Conv::operator Base() 但实际上编译器选择了 Conv::operator Derive()

但是当我给出下面的代码时,编译器选择了Conv::operator Base()

struct Base
{
};

struct Derive// : private Base
{
};

void fn(Base, int);

struct Conv
{
    operator Base() const;
    operator Derive();
};

int main()
{
    Conv c;
    fn(c, 0);
    return 0;
}

最佳答案

你的 c 对象是非常量的,所以在第一种情况下 Derive 重载是一个完全正确的 const 匹配,仍然可以隐式转换为 Base 。在第二个示例中,Derive 无法转换为 Base,因此必须选择直接的 Base 转换。

关于c++ - 为什么下面的代码会出错(关于重载解析),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18489778/

相关文章:

C++ 获取函数/方法的错位名称

C++ Boost类内的多线程

C++重载>>运算符奇怪的编译错误

function - F#:如何作为第一类对象访问 Dotnet 对象的方法的特定重载

c++ - 如何知道消耗了多少堆栈函数?

c++ - 映射/迭代器增量错误

c++ - 有没有办法放置返回值?

java - 编写方法重载的最佳方法是什么?

c++ - 带有大量参数的函数重载

c++ - 简单的功能重载的问题