2016-02-25 147 views
1

我使用info-string作爲默認參數聲明一個日誌記錄功能。(string&)string()和(string&)「」作爲默認參數有什麼區別?

void LogError(ErrorEnum error, string& infoStr = (string&)"") 

當函數被調用時沒有額外的字符串,我得到試圖寫入日誌流以這樣的方式未處理的異常:

ofstream mystream; 
    //do some stuff 
    mystream<< "Error " << infoStr << " failed!" << endl; 

如果ICH更改默認參數(字符串&)string(),異常不再發生。使用VS2013進行調試顯示,在這兩種情況下,infoStr的值都是「」。

那麼兩個聲明之間的區別在哪裏呢?

+0

你爲什麼要轉換爲'string&'?不是'string&infoStr =「」'工作嗎? – Biffen

回答

3

在第一種情況下,您基本上是從char const (&) [1]投射到string&。這顯然是無效的。 std::string是一個類,它不是單獨的字符數組,因此是例外。在第二種情況下,你正在從右值施加臨時值爲左值。這是可疑的,但由於引用值實際上是相同的類型,它工作得很好。

相關問題