【问题标题】:operator[] overloading C++ [duplicate]运算符 [] 重载 C++ [重复]
【发布时间】:2013-04-23 20:55:12
【问题描述】:

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

详情: 该类有一个私有变量,它是一个字符串数组。 operator[] 的版本不同,一个必须是 const,另一个不是

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

我现在写的那个

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

只返回索引处的字符串。

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

编辑: 既然要写这些,每个函数里面的代码会不会一样?

【问题讨论】:

标签: c++ overloading operator-keyword


【解决方案1】:

正确的重载版本是:

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

【讨论】:

    猜你喜欢
    • 2011-10-27
    • 2012-12-22
    • 2016-09-26
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 2016-06-27
    • 2020-01-14
    相关资源
    最近更新 更多