当类可以强制转换为函数类型时函数如何重载 最近我正在阅读C++模板。附录B.3.4中有一个模棱两可的例子,我为编译添加了一些细节 #包括 typedef void FuncType(双精度,整数); void f(double,int){ printf(“调用%s\n”,函数); } 类间接函子{ 公众: void运算符()(双精度,双精度){ printf(“调用%s\n”,函数); } 运算符FuncType*()常量{return&f;} }; 无效激活(间接函子常量和函子对象){ funcObj(3,5); } int main(int argc,char*argv[]){ 间接函子funcObj; 激活(funcObj); 返回0; }

当类可以强制转换为函数类型时函数如何重载 最近我正在阅读C++模板。附录B.3.4中有一个模棱两可的例子,我为编译添加了一些细节 #包括 typedef void FuncType(双精度,整数); void f(double,int){ printf(“调用%s\n”,函数); } 类间接函子{ 公众: void运算符()(双精度,双精度){ printf(“调用%s\n”,函数); } 运算符FuncType*()常量{return&f;} }; 无效激活(间接函子常量和函子对象){ funcObj(3,5); } int main(int argc,char*argv[]){ 间接函子funcObj; 激活(funcObj); 返回0; },c++,overloading,C++,Overloading,它表示,当类具有强制转换为函数运算符时,将向重载解析集合添加带有隐式参数的代理函数,因此调用运算符FuncType*()const需要将间接函数&强制转换为FuncType*,该函数的优先级不高于成员运算符()(double,double) 但是代码调用operator FuncType*()const,为什么operator FuncType*()const比operator()(double,double)具有优先级?在activate的调用站点上,funcObj是一个const引用。由于I

它表示,当类具有强制转换为函数运算符时,将向重载解析集合添加带有隐式参数的代理函数,因此调用
运算符FuncType*()const
需要将
间接函数&
强制转换为
FuncType*
,该函数的优先级不高于成员
运算符()(double,double)


但是代码调用
operator FuncType*()const
,为什么
operator FuncType*()const
operator()(double,double)
具有优先级?

activate
的调用站点上,
funcObj
是一个const引用。由于
IndirectFunctor::operator()
不是常量成员函数,因此它不是
funcObj(3,5)
的可行候选函数

使函数调用运算符常量(
IndriectFunctor::operator()const
)或将参数更改为
activate
,使其不为常量(
void activate(IndirectFunctor&funcObj)