我遇到了两个使用函数指针的不同代码。
请告诉我哪个更好?有什么偏好吗?
typedef int myFunction(int a,int b);
extern myFunction *ptfunction;
和
typedef int (*ptfunction)(int a,int b);
我遇到了两个使用函数指针的不同代码。
请告诉我哪个更好?有什么偏好吗?
typedef int myFunction(int a,int b);
extern myFunction *ptfunction;
和
typedef int (*ptfunction)(int a,int b);
两者都很糟糕,因为它们在语法上是不正确的。
你需要:
typedef int (*myFunction)(int a, int *b);
第二个无效;如果您修复第一行以声明变量而不是类型,则它将等效于第一行:
int (*ptfunction)(int a, int b);
哪个“更好”完全取决于你想用这些东西做什么。如果你需要多次引用同一个类型,那typedef
会让事情更清楚;如果您只是想像示例中那样声明一个函数指针,那么它只会增加额外的噪音。
(大概,在你的第一个例子中,第二个参数应该是int
not int*
,否则函数调用将无法编译)。
使用函数对象通常更方便和灵活,std::function
特别是因为它们可以绑定任意状态。但这超出了这个问题的范围。
第一个包含另一个错误:您不能将 int 强制转换为指向 int 的指针。哪个更好?他们都完全断章取义。
对于第一个代码,您必须在某处定义 ptfunction。而且我不认为可以编译第二个代码。
尝试这个:
typedef int *PTFUNCTION(int, int);
PTFUNCTION func = f1;
func(1, 2);