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)”的调用不匹配
Q1:为什么x(5)
允许调用,即使X
只定义了到函数指针的转换,而不是operator()
?
Q2:相反,如果我们定义到另一个函子的转换,为什么不允许同样的事情?