c++ - 函数指针的赋值(effective c++ item 35)

标签 c++ function-pointers effective-c++

<分区>

effective c++, item 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

最佳答案

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

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

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

关于c++ - 函数指针的赋值(effective c++ item 35),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51546320/

相关文章:

c++ - GTK+ 警告 : Can't set a parent on widget which has a parent

c++ - 如何使用通用函数指针作为模板参数?

c - 为什么我不能将函数指针强制转换为 (void *)?

c++ - 什么是二进制可升级性?

C++: Scott Meyers "Effective STL": item 31: know your sorting options: 帮助理解

评估模板的 C++ 模板参数(模板模板参数)

c# - 对内存位置的无效访问 - 管理到非托管代码

c++ - 循环缓冲区重置内存?

c# - c#中的委托(delegate)和c++中的函数指针有什么区别?

c++ - 为什么我更喜欢 "explicitly typed initializer"成语而不是明确给出类型