函数指针的分配(有效的c ++项目35)[重复]

Posted

技术标签:

【中文标题】函数指针的分配(有效的c ++项目35)[重复]【英文标题】:Assignment of function pointers (effective c++ item 35) [duplicate] 【发布时间】:2018-07-26 19:35:16 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

You can dereference the function pointer as much as you want :P

以上是关于函数指针的分配(有效的c ++项目35)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

matlab和C中的内存管理器问题[重复]

第八章 指针实验

将对象的指针提供给构造函数会导致对象被破坏[重复]

C语言之以函数指针结构体方式实现面向对象的思想

C语言实训,生成不重复的验证码

C程序实验报告