为什么隐式转换运算符比转换为std :: string要优先加倍?

时间:2017-05-21 12:34:30

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

如果我为我的班级定义了多个转换运算符:

#include <iostream>
#include <string>

class Widget {
public:
    operator double() {
        return 42.1;
    }

    operator std::string() {
        return "string";
    }
};

int main(void) {
    Widget w;
    std::cout << w << std::endl;

    return 0;
}

即使我更改了成员函数的顺序,它的输出也是42.1

为什么编译器总是使用operator double()而不是operator std::string()?这有什么功能解决规则?

如果我将第二个转换运算符定义为int而不是std::string,编译器会抱怨模糊的调用。

0 个答案:

没有答案