當我編譯此代碼:C++:自動const?
class DecoratedString
{
private:
std::string m_String;
public:
// ... constructs, destructors, etc
std::string& ToString() const
{
return m_String;
}
}
我從G ++得到以下錯誤:invalid initialization of reference of type 'std::string&" from expression of type 'const std::string'
。
爲什麼m_String被視爲const?編譯器不應該簡單地在這裏創建一個引用嗎?
編輯:
此外,我應該怎麼做來得到這個功能作爲轉換爲一個字符串,在大多數情況下工作嗎?我做了const函數,因爲它不修改內部字符串...也許我只是需要使它返回一個副本...
編輯:好的...使它返回一個副本工作。
當然,你可以讓函數返回一個'const std :: string&'。 – 2010-07-10 17:36:13
@詹姆斯麥克奈利斯 - 常量將意味着......參考是不變的,或者參考文獻中的數據是不變的?對不起,剛剛閱讀了Herb Sutter關於const正確性的論文,並且試圖學習如何在代碼中更有效地使用const。 – 2010-07-10 17:38:49
@sheepsimulator:這會使它成爲一個const對象的引用,就像'const std :: string *'是一個指向const對象的指針。由於引用不能被反彈(例如,一旦你初始化一個引用來引用某個對象,它就不會引用任何其他對象),「常量引用」(即std :: string&const)的概念,是無意義的。 – 2010-07-10 17:40:32