重载中括号运算符[]以进行获取和设置操作

72

我有以下类:

class risc { // singleton
    protected:
        static unsigned long registers[8];

    public:
        unsigned long operator [](int i)
        {
            return registers[i];
        }
};

你可以看到我已经实现了中括号运算符用于“获取”操作。
现在我想要实现它用于“设置”,即:risc[1] = 2

如何实现呢?


我之所以看到这个是因为我现在正在观看的这个视频 - https://youtu.be/ux3s1IIvNdg?t=603 - varshneydevansh
2个回答

98

试一下这个:

class risc { // singleton
protected:
    static unsigned long registers[8];

public:
    unsigned long operator [](int i) const    {return registers[i];}
    unsigned long & operator [](int i) {return registers[i];}
};

16
您还可以返回一个 const long&。如果它不是原生类型,那么这种方式将是首选,但对于像 long 这样的类型,通过值返回也是可以的。 - Seth Carnegie
2
整数类型不应该被替换为 size_t 吗? - Trevor Hickey
@Andrew 无符号长整型 operator [](int i) const {return registers[i];} 上述代码会被调用吗? 我看另一个代码既用于获取又用于设置 无符号长整型 & operator [](int i) {return registers[i];} - tanweer alam
@tanweeralam 当对象或引用被声明为const时,将调用const变量。例如:const risc r; r[0]; - Andrew Durward
@AlexisWilke,STL容器有at函数来检查边界,以实现此目的。 - LRDPRDX
显示剩余3条评论

18

你需要在你的operator[]中返回一个引用,以便该类的用户可以使用它来设置值。因此,函数签名将是unsigned long& operator [](int i)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接