參考:[33.11] Can I convert a pointer-to-function to a void*?當p是函數指針時,我們應該使用p(..)還是(* p)(..)?
#include "stdafx.h"
#include <iostream>
int f(char x, int y) { return x; }
int g(char x, int y) { return y; }
typedef int(*FunctPtr)(char,int);
int callit(FunctPtr p, char x, int y) // original
{
return p(x, y);
}
int callitB(FunctPtr p, char x, int y) // updated
{
return (*p)(x, y);
}
int _tmain(int argc, _TCHAR* argv[])
{
FunctPtr p = g; // original
std::cout << p('c', 'a') << std::endl;
FunctPtr pB = &g; // updated
std::cout << (*pB)('c', 'a') << std::endl;
return 0;
}
問題>哪種方式,原來的或更新的,是推薦的方法? 我已經用VS2010測試了兩種方法,並且每個都打印出正確的結果。
謝謝
雖然我確實看到在原來的職位以下用法:
void baz()
{
FredMemFn p = &Fred::f; ← declare a member-function pointer
...
}
指針到成員函數是**完全不同的主題**。我在[我的這個答案]結尾簡要地提到了它們(http://stackoverflow.com/q/8198062/596781)。 –
你應該使用'(******************* p)()',顯然! –