2015-05-27 43 views
0

我有這樣的功能:爲什麼我需要將const添加到參數中?

void 
SpookyBoy(bool Troublemaker, const Glib::ustring& name, HorrorPunkBand& band); 

如果我刪除單詞const我得到這個錯誤:

no known conversion for argument 2 from ‘const char [5]’ to ‘Glib::ustring&’ 

我只是想知道什麼是編譯器,可有人向我解釋爲什麼字const編譯器可以投射?


即使我不得不承認,這兩個問題是人誰已經知道了答案(在更不用說)相似,但肯定不是一個人誰還不知道answwer(在先驗) 。

+2

您的函數聲明是否看起來像這樣?根據錯誤消息,'ustring'參數顯然被聲明爲'const Glib :: ustring&name',即作爲參考。 – AnT

+0

@AnT是的,你是對的,我忘了&+1給你 –

+0

可能重複[爲什麼const爲隱式轉換?](http://stackoverflow.com/questions/3895647/why-const-for-implicit-conversion) – AnT

回答

4

你顯然調用帶有字符串文字作爲參數

SpookyBoy(..., "1234", ...); 

編譯器可以隱式轉換字符串常量(在這種情況下有類型const char [5])鍵入Glib::ustring你的函數。但是,隱式轉換的結果是臨時對象。僅在C++語言中const左值引用可以綁定到臨時對象。非const引用不能綁定到臨時對象。

如果沒有const函數聲明中你必須通過明確引入Glib::ustring類型的命名對象,並把它當作一個參數來調用你的函數作爲

Glib::ustring name("1234"); 
SpookyBoy(..., name, ...); 

即。

P.S.另請參見Why const for implicit conversion?

+0

你應該得到至少+1和thx的鏈接 –

相關問題