2011-11-12 53 views

回答

8

它定義了類型「參照以兩個int S和返回一個int的函數」。該類型的變量需要初始化,但不能將初始化程序放入typedef中。這與例如沒有區別int

int i; 

typedef int& intref; // no initializer allowed 
intref ri(i); // initializer required 

int f(int, int); 

typedef int (&rifii) (int,int); // no initializer allowed 
rifii rf(f); // initializer required 
+0

你是什麼意思'初始化程序需要'? – Nawaz

+2

@Nawaz:「需要初始化」我的意思是你必須給一個初始化程序,即在定義時初始化它。例如在'int a = 3;''3'部分是初始化器。就像'int b(5);'中的'(5)'一樣。在上面的例子中,這意味着'intref ri;'會是一個錯誤,因爲沒有初始化器,但是'intref ri(i);'是因爲有一個初始化器(即'(i)')。 – celtschk

+0

@celtschk:謝謝....... – bhuwansahni

2

這是一個typedef,所以它不能被「初始化」,它只是引入了一個新的名稱爲類型「引用函數返回一個int,並採取兩個整數作爲參數」。

0

它是一個typedef參考函數。並且typedef不能被初始化。想想typedef int rank_t;也沒有初始化。

1

這是需要兩個參數並且其返回類型爲int

一個類型定義未初始化函數的引用:

typedef int (&rifii) (int,int); 

在聲明rifii類型的引用才把它必須被初始化。

rifii r = foo; 

其中「foo」是一個函數,int foo(int, int);

-2

typedef就像是進入一個晚宴,並說你好,我是埃德 - 在那道菜沒有肉。這個定義將賦予這些骨頭的肉體。

+0

對於那些不懂隱喻的人。這是一個聲明。 –

+2

不,它不是。一個聲明會讀取'extern int(&rifii)(int,int);'。 typedef是不同的。對於一個更貼切的比喻,他說:「嗨,我是Slartibartfast。*但是你可以叫我Slart。」 – celtschk

+1

好吧,由於我的評論編輯失敗了,我添加了它(並在此添加at-attribution)額外的評論:其實我的更好的比喻仍然不是一個好的比喻,因爲它仍然表明一個單一的對象。一個更好的比喻將是一個生物學家說:「我們要談論犬的紅斑狼瘡,但我們只是說狗。」 – celtschk

相關問題