我的老師說[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);
我的老師說[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);
float Function(int Tmp = Show(int, float));
這定義了一個名爲Function
函數返回一個float
和帶有一個參數即稱爲Tmp
一個int
。 Tmp
正在被賦予一個默認值,但默認值是無效的部分。 Show(int, float)
是什麼值?它似乎想要調用稱爲Show
的函數(或構造Show
類型的臨時對象),並傳遞int
和float
作爲參數。但是int
和float
不是函數的有效參數。
事實上,只有少數幾個地方可以想到Show(int, float)
是C++語法的一種可能產生(不使用預處理器)。首先是作爲Show
函數聲明的一部分。例如:
int Show(int, float);
二是,如果Show
是一個類型,則給出一個函數類型。例如在:
foo<Show(int,float)>();
可能有一些其他的類似案件,其中沒有實際調用一個名爲Show
功能。
爲什麼不將int和float作爲函數的有效參數?我認爲所有重要的是,函數Show返回一個int值? – Computernerd
@Lim因爲必須給一個默認參數一些默認值。例如'float Function(int Tmp = 5);'很好。 'Tmp'參數的默認值是'5'。對於調用'Show'工作的函數,你必須做一些類似'float Function(int Tmp = Show(5,6.0f));' –
@ stftrabbit謝謝 – Computernerd
試着編譯它們,看看你得到了什麼錯誤/警告。 –
我得到兩個錯誤:默認參數不在參數列表和類型名稱的末尾是不允許的。這是什麼意思 – Computernerd