2013-07-29 77 views
5

我剛看到這個語法函數原型在C++:在函數原型中爲參數賦值時,這意味着什麼?

explicit String(unsigned char value, unsigned char base=10);

我以前沒見過這一點,但我是對的假設它設置base 10,無論你怎麼稱呼它的用?

+0

@EdKing你說的問題,明確和困惑我們 – doctorlove

+1

我的壞 - 我已經改裝成問題標題:-) –

+0

所以'explicit'無關任何東西在這裏? –

回答

4

默認參數base將取任何值發送給它,或值10,如果你不發送它,例如,通過調用

String(0); 

既然你可以只用一個參數調用它,因爲第二可以默認,一個構造函數可以被標記爲explicit。這意味着它不會在沒有注意的情況下從unsigned char創建臨時文件,您必須顯式調用構造函數。

+0

AFAIR,具有多個參數的構造函數也可以聲明爲顯式以防止初始化程序列表轉換? – nijansen

+0

好點 - 我沒有想到這一點 – doctorlove

0

看到這個link

當聲明,我們可以爲每個 最後一個參數指定默認值功能。如果相應的 參數在調用該函數時留空,則會使用該值。爲此,我們 只需使用賦值運算符和函數聲明中參數 的值。如果在調用函數時未通過該參數 的值,則使用默認值,但是如果指定了值,則忽略該默認值,並使用 傳遞值代替。

explicit關鍵字防止轉換:

C++構建函數(構造),其僅具有一個參數自動 執行隱式類型轉換。例如,如果在 中傳遞int時,ctor需要一個字符串指針參數,編譯器會添加它必須具有的 代碼以將int轉換爲字符串指針。但是,這種自動行爲可能會導致錯誤。

+2

完美。謝謝 - 快速和無痛。 –

+1

@serial downvoter,獲得生命。 – Maroun

1

base有一個默認值。您可以爲每個參數分配默認值,因爲以下所有參數都具有默認值。

explicit可以防止隱式轉換,所以String k = 0不會被接受爲有效 - 否則將會調用String(0, 10)

相關問題