1

所以,我必须为我正在编写的一个类编写两个版本的括号运算符。

详细信息:该类有一个私有变量,它是一个字符串数组。operator[] 的版本不同之处在于一个必须是 const,而另一个不是

我有点不确定这两个版本实际上有何不同,以及在调用时如何区分它们。

我目前写的那篇

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

只需返回索引处的字符串。

我的问题是,拥有一个 const 和一个非常量有什么意义?它们将有何不同?

编辑:由于我必须编写这些,每个函数中的代码是否相同?

4

1 回答 1

3

正确的重载版本是:

  1. 访问非 const MyClass 实例

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

  2. 访问 const 或 temp MyClass 实例

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

后者保证通过常量实例引用访问将不允许修改返回的std::string引用,但返回结果。

实现可能需要考虑您至少可以为容器添加新的(默认)字符串值以获取当前未知的索引值,并且您需要决定如何处理未知索引值以进行const访问(返回空字符串、抛出异常等.)。

于 2013-04-23T20:57:34.640 回答