重载下标运算符

时间:2016-10-26 19:10:41

标签: c++ operator-overloading

我有一个示例Map类,我试图覆盖下标运算符。允许类的用户读取和写入Map。 正在读取Map [“a”],并且Map [“a”] =“something”是该类的写入。但是,我无法弄清楚如何使用赋值运算符方面的东西,并允许传入值来替换它。现在,如果我尝试分配一个新值,它只是读取“分段错误”

这是我到目前为止所做的:

rev-parse

现在我没有任何代码..只是想看到它们会被成功调用。

我似乎无法弄明白的是,如果我做了

这样的事情
$ git rev-parse --symbolic-full-name target@{u}
fatal: no upstream configured for branch 'target'

我会遇到分段错误。我假设当我想为特定键分配新值时,将调用赋值运算符=。难道我做错了什么?

顺便说一句,VALUE_TYPE和KEY_TYPE只是定义为字符串,每个键都有一个与之关联的值。

1 个答案:

答案 0 :(得分:3)

您不是要分配给地图,而是分配给operator[]返回的对象 (在m["a"] = "hey";中,m["a"]不是Map,而是VALUE_TYPE&。)

运算符需要返回对有效对象的引用,否则行为未定义。

我能想到的最小的例子:

struct Mapp
{
    int& operator[](int i) { return member; }
    int member;
};

int main()
{
    Mapp m;
    m[0] = 12; // Assigns 12 to m.member
}

您还想重载运算符的const版本。