const正確性讓我有些困惑。在C++中使用const的正確方法是什麼?
你用什麼經驗法則來決定何時應該是const或不是?
例如考慮這個例子
class MyClass
{
string ToString(); // this one?
const string& ToString(); // or this?
const string& ToString() const; // or this?
char* ToString(); // What about this?
const char* ToString(); // or this?
const char* ToString() const; // or this?
const char const* ToString(); // Is this legal?
const char const* ToString() const; // how about this?
char const* ToString(); // or even this?
};
Const會變得非常混亂。
所有這些ToString方法之間有什麼區別?
如果我理解正確,第一個返回一個新的字符串對象,如果需要可以修改 。 第二個返回一個常量引用,也許它應該是字符串const & ToString()。 第三個可能是廢話,因爲引用總是不變的是正確的?
以爲我會拋出舊char *版本在那裏比較,因爲我有方法返回對象指針,我不知道它們是否應該是const或不。
我想我只是想了解const的正確性的限制和好處,以及如何確定某些東西是否應該是const,以及如何正確應用const,因爲將const放在不同的地方會改變含義。
編輯:另外,我該如何處理'...丟棄限定符'。這實際上意味着什麼?
第二個和第三個之間沒有什麼區別。 – dan04 2010-10-14 23:51:31
我寧願從一般規則開始,「如果你可以把const放在某個地方,那麼你應該。」很顯然,這個規則有很多例外(其中很多),但實際上,你可以使const變量越多,推斷,調試和維護代碼就越容易。我認爲這比起更常見的「讓我們只在必要的地方使用常量,並且可能在其他地方使用常常更好」。 – 2010-10-14 23:51:42
您是否閱讀過Herb Sutter的GOTW文章[「Const Correctness?」](http://www.gotw.ca/gotw/006.htm)它通過一個示例類來解釋(1)應該是什麼'const' (2)使用'const'的效果是什麼。這絕對是一個很好的起點。 – 2010-10-15 00:02:50