2012-12-28 132 views
1

我的老師說[A]是正確答案,但爲什麼不是[C]。選項[B]作爲原型有什麼問題。選項[B]對我來說看起來很完美函數原型

以下哪個函數原型是完全可以接受的? A:

[A]。 int Function(int Tmp = Show());

[B]。 float Function(int Tmp = Show(int, float));

[C]。 A和B.

[D]。 float = Show(int, float) Function(Tmp);

+1

試着編譯它們,看看你得到了什麼錯誤/警告。 –

+0

我得到兩個錯誤:默認參數不在參數列表和類型名稱的末尾是不允許的。這是什麼意思 – Computernerd

回答

6
float Function(int Tmp = Show(int, float)); 

這定義了一個名爲Function函數返回一個float和帶有一個參數即稱爲Tmp一個intTmp正在被賦予一個默認值,但默認值是無效的部分。 Show(int, float)是什麼值?它似乎想要調用稱爲Show的函數(或構造Show類型的臨時對象),並傳遞intfloat作爲參數。但是intfloat不是函數的有效參數。

事實上,只有少數幾個地方可以想到Show(int, float)是C++語法的一種可能產生(不使用預處理器)。首先是作爲Show函數聲明的一部分。例如:

int Show(int, float); 

二是,如果Show是一個類型,則給出一個函數類型。例如在:

foo<Show(int,float)>(); 

可能有一些其他的類似案件,其中沒有實際調用一個名爲Show功能。

+0

爲什麼不將int和float作爲函數的有效參數?我認爲所有重要的是,函數Show返回一個int值? – Computernerd

+0

@Lim因爲必須給一個默認參數一些默認值。例如'float Function(int Tmp = 5);'很好。 'Tmp'參數的默認值是'5'。對於調用'Show'工作的函數,你必須做一些類似'float Function(int Tmp = Show(5,6.0f));' –

+0

@ stftrabbit謝謝 – Computernerd