使用用户定义的转换运算符

时间:2017-04-21 06:45:25

标签: c++ type-conversion implicit-conversion

我们说我有以下代码:

class Base
{
};

class Foo
{
public:
    Foo(Base* base)
    {
    }
};

class BarBase
{
public:
    operator Base*()
    {
        return base;
    }

private:
    Base* base;
};

class Bar : public BarBase
{
public:
    Bar()
    {
        Foo* foo = new Foo(this);
    }
};

代码无法在GCC 6.3上编译并出现以下错误:

prog.cpp: In constructor ‘Bar::Bar()’:
prog.cpp:30:26: error: no matching function for call to ‘Foo::Foo(Bar*)’
   Foo* foo = new Foo(this);
                          ^
BarBase派生的

Bar具有Base*的用户定义转换运算符。为什么没有this使用上述转换运算符将隐式转换为Base*

1 个答案:

答案 0 :(得分:4)

您已正确定义隐式转换运算符,但它不适用于指向对象的指针,仅适用于引用。将您的代码更改为

Foo* foo = new Foo(*this);

无法为指针类型定义隐式转换运算符,因为转换运算符必须是非静态成员函数,因此仅适用于引用。