2014-01-25 77 views

回答

6

在你的例子中,因爲你使用了一個非const的左值引用,所以這是不行的。一個臨時字符串將從字符串文字中創建,並且臨時對象只能綁定到常量左值引用或右值引用。

這會工作:

void func(const std::string&); 
void func(std::string&&); 

注意:一些編譯器(著名VS)會接受您的代碼,因爲它們允許結合非const的左值來臨時對象的引用爲「延伸」。但這不是標準的C++,所以如果你想編寫可移植的代碼,你應該避免它。另外,使用它意味着您必須向供應商瞭解語義。

+0

vc2008允許它。爲什麼? – Ivars

+2

@Ivars一個臭名昭着的編譯器「擴展」。 – juanchopanza

+0

是'void func(const std :: string&)'標準? – Ivars

相關問題