我使用函數指針遇到了兩個不同的代碼。函數指針語法
請告訴我哪個更好?有沒有任何偏好?
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的指針爲int。哪一個更好?他們都完全沒有背景。
對於第一個代碼,您必須在某處定義ptfunction。 和我不認爲第二個代碼可以編譯。
嘗試:
typedef int *PTFUNCTION(int, int);
PTFUNCTION func = f1;
func(1, 2);
都不是,使用std::function
std::function<int (int ,int)> ptfunction;
ptfunction = f1;
實施例(它在STD中的C++ 0x):
第二個是無效的;如果您修復的第一行來聲明一個變量,將等同於第一,不是一個類型:
int (*ptfunction)(int a, int b);
這是「更好」你想用這些東西做什麼完全取決於。如果你需要多次提到同一類型,那麼typedef
會使事情變得更加清晰;如果你只是想像你的例子那樣聲明一個函數指針,那麼它只會增加額外的噪聲。
(據推測,在你的第一個例子中,第二個參數應該是int
不int*
,否則函數調用將不編譯)。
使用函數對象通常更加方便和靈活,特別是,因爲這些可以綁定任意狀態。但這超出了這個問題的範圍。
我會第一次看到,因爲第二次不會編譯。 –
我真的不明白typedef在這裏的需要。不會簡單地聲明int(* ptfunction)(int a,int b);實現與typedef相同嗎?我認爲簡單的聲明更清楚。 (如果你不需要它,編譯器會將它優化掉......) –
如果你編輯了原始文章並添加了兩個工作示例,這將會很有幫助。 – octopusgrabbus