2013-04-23 119 views
1

所以,我必須爲我正在編寫的類編寫兩個版本的括號運算符。operator []重載C++

詳細信息: 該類有一個私有變量,它是一個字符串數組。 operator []的版本有所不同,其中一個必須是const,另一個不是

我有點不確定這兩個版本實際上有何不同,以及何時被調用時,它們將能夠被區分。

一個我現在已經寫

string& MyClass::operator[](unsigned int index); 

只是返回索引處的字符串。

我的問題是,有一個const和一個非const的點是什麼?他們又會有什麼不同呢?

編輯: 由於我必須寫這些,每個函數內的代碼是相同的嗎?

+0

閱讀所有答案在這裏:http://stackoverflow.com/questions/13479548/why-having-const-and-non-const-accessors – Salgar 2013-04-23 20:56:53

+0

@Salgar處理(包裝)容器可能需要一些額外的考慮因素... – 2013-04-23 21:16:05

回答

3

正確的重載版本是:

  1. 訪問非const的MyClass的實例

    std::string& MyClass::operator[](unsigned int index);

  2. 訪問常量或臨時MyClass的實例

    const std::string& MyClass::operator[](unsigned int index) const;

後者保證通過常量實例引用訪問將不允許修改返回的std::string引用,但返回結果。

實現可能需要考慮您可以至少爲當前未知的索引值向容器添加新的(默認)字符串值,並且您需要決定如何處理const訪問的未知索引值(返回空字符串,拋出異常等)。