void f(int){}
typedef void (*f_ptr)(int);
struct Functor{
void operator()(int){}
};
struct X{
operator f_ptr(){ return f; }
};
struct Y{
operator Functor(){ return Functor(); }
};
int main(){
X x; Y y;
x(5); // works ?!
y(5); // doesn't ?!
}
点击此处查看在 Ideone 上的实例。输出结果:
错误:没有为‘(Y) (int)’定义匹配的调用
问题1:为什么可以调用 x(5)
,即使只有 X
定义了转换到函数指针,而没有定义 operator()
?
问题2:反过来,如果我们定义转换到另一个仿函数,为什么同样的事情不被允许?