在有效的c ++项目35 中,作者通过函数指针介绍了策略模式。专门在第172页
class GameCharacter;
int defaultHealthCalc(const GameCharacter& gc);
class GameCharacter {
public:
typedef int (*HealthCalcFunc)(const GameCharacter&);
explicit GameCharacter(HealthCalcFunc hcf = defaultHealthCalc)//why not &defaultHealthCalc?
: healthFunc(hcf)
{}
int healthValue() const
{ return healthFunc(*this); }
...
private:
HealthCalcFunc healthFunc;
};
在第六行中,为什么对函数指针HealthCalcFunc
的分配是defaultHealthCalc
而不是&defaultHealthCalc
?
答案 0 :(得分:9)
由于编译器知道您正在为函数指针分配值,因此只需指定所需函数的名称就足够了-语法是明确的。
如果您想添加与号以使其清晰可见,则语法允许这样做,但这不是必需的。
类似地,当从指针调用函数时,可以直接使用指针的名称(如示例代码中所述),也可以使用'*'运算符显式地取消引用它。无论哪种情况,编译器都知道您的意思。