为什么隐式转换成员函数重载按返回类型工作,而普通函数不允许这样做?

gre*_*fab 6 c++ polymorphism implicit-conversion

C++不允许基于返回类型的方法的多态性.但是,当重载隐式转换成员函数时,这似乎是可能的.

有谁知道为什么?我认为运算符在内部处理方式.

编辑:这是一个例子:

struct func {
    operator string() { return "1";}
    operator int() { return 2; }
};

int main( ) {
    int x    = func(); // calls int version
    string y = func(); // calls string version
    double d = func(); // calls int version
    cout << func() << endl; // calls int version
}
Run Code Online (Sandbox Code Playgroud)

Meh*_*ari 11

转换运算符实际上并不被视为不同的重载,并且不会根据它们的返回类型调用它们.编译器只在必须时使用它们(当类型不兼容并且应该转换时)或明确要求使用其中一个与强制转换操作符时使用它们.

从语义上讲,您的代码所做的是声明几个不同的类型转换运算符,而不是单个运算符的重载.