2011-11-04 97 views
0

動機:有沒有辦法編寫一個將l-val ref或r-val引用作爲輸入參數的函數?

我有一個函數

func(const string& s); 
{ 
    //... 
} 
當然

這不會工作:

func("hello" + " " + "world"); 

這解決了這個問題:

func(string&& s); 

是否有辦法編寫func以使其自動化在理論上與r值參考值和l值參考值一起工作?

+2

「這解決了這個問題」說實話,如果解決了這個問題,那看起來非常像編譯器bug。 –

+1

這是一個簡化的例子,是錯誤的,因爲我沒有理解這個問題...貓++的解釋是正確的原因...我忘記了結果是字符數組,不是std :: string ... noobish錯誤:( – NoSenseEtAl

回答

3

Rvalues綁定到const左值refs沒有問題。你的代碼的問題在於類型。至少需要一個std::string用於重載運算符+。

func(std::string("hello") + " " + "world"); 
1

是的。您可以使用模板的參考摺疊行爲:

template <typename S> 
func (S && s) 
{ 
    //... 
} 

這保留了l值和r值以及常量。

相關問題