函数指针的赋值(有效的c ++项目35)

Sea*_*Ian 5 c++ function-pointers effective-c++

有效的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;
};
Run Code Online (Sandbox Code Playgroud)

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

Tim*_*all 9

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

如果你想添加&符号以使其清晰,语法允许,但它没有必要.

类似地,当从指针调用函数时,您可以直接使用指针的名称(如示例代码中所做的那样),或使用'*'运算符显式取消引用它.在任何一种情况下,编译器都知道你的意思.

  • [你可以根据需要取消引用函数指针:P](https://godbolt.org/g/X4Qhvd) (2认同)