2013-04-23 88 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访问的未知索引值(返回空字符串,抛出异常等)。