2011-06-07 66 views
-1

我寫了下面一段鍵盤上的代碼,但我不知道如何/爲什麼它應該編譯。問題在C++中使用的typedef

#include<iostream> 

using namespace std; 

typedef double dObject; 
typedef int iObject; 
typedef void (*swapfuncptr)(dObject, dObject); 

void swap(dObject a,dObject b) { 
cout << a << " " << b << endl; 
dObject tmp; 
tmp = a; 
a = b; 
b = tmp; 
cout << a << " " << b << endl; 
} 
int main() { 

double a = 7.5, b = 5.3; 
swapfuncptr swapptr1; 
swapptr1 = &swap; 
swapptr1(a, b); 

int c = 3, d = 2; 
swapfuncptr swapptr2; 
swapptr2 = &swap; 
swapptr2(c, d); 

swapfuncptr swapptr3; 
swapptr3 = &swap; 
swapptr3('r', 'd'); 
return 0; 
} 

所以dobject只適用於具有整數參數的函數的雙打也可以。我不明白這是如何工作的。

能有人請解釋。

感謝 小號

+0

如果這不只是測試代碼,我想你應該重構它使用模板函數,而不是類型定義 – 2011-06-07 15:02:24

回答

4

int是隱式可轉換到double。爲double創建typedef不會改變這一點。

+0

感謝。我發現它不適用於字符串。 @Nwaz&Jalf:我對此表示歉意。我將密切關注現在的答案。謝謝你的好心。 – svk 2011-06-07 15:18:46