C ++转换运算符重载

时间:2014-09-27 13:37:14

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

' INT'和' double'转换功能是明确的'并在此代码中为什么我允许使用此转换而不是错误消息? 如果我删除了所有转换过载功能代码,则会发生转换错误'

class Person
{
public:
    Person(string s = "", int age = 0) :Name(s), Age(age) {}
    operator string() const { return Name; }
    explicit operator int() const{ return 10; }  // ! Explicit
    explicit operator double()const { return 20; } //! Explicit
    operator bool()const { if (Name != "") return true; return false; } // using this
};

int main(){

    Person a;
    int z = a;
    std::cout << z << std::endl;   // Why print "1"?  Why uses bool conversion?
}

我这是答案:

因为&#39; a&#39;不能转换为int或double它发生错误,但因为它有bool转换函数,可以转换为int和int转换为double,代码使用此函数。

1 个答案:

答案 0 :(得分:2)

我更正了所有示例代码错误和遗漏。

我将输出添加到隐式operator bool()以使其调用显而易见。

请参阅coliru:http://coliru.stacked-crooked.com/a/99f4a5a9173a52a8

int z = a;

上面的行调用了隐式的bool-conversion-operator,因为这是你让它从Person转到int的唯一方法,它只需要一个用户定义的转换(最大值)允许的)。