5

有效的 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;
};

在第六行,为什么对函数指针的赋值HealthCalcFuncdefaultHealthCalc而不是&defaultHealthCalc

4

1 回答 1

9

由于编译器知道您正在为指向函数的指针分配值,因此指定所需函数的名称就足够了——语法是明确的。

如果您想添加与号以使其清晰,语法允许这样做,但这不是必需的。

同样,当从指针调用函数时,您可以直接使用指针的名称(如示例代码中所做的那样),或者使用“*”运算符显式取消引用它。无论哪种情况,编译器都知道您的意思。

于 2018-07-26T19:39:56.327 回答