【发布时间】:2016-10-12 23:24:32
【问题描述】:
我正在尝试在 C++ 中实现像 std::map 这样的容器。我在重载运算符 [] 时有一个小查询。我看到这个运算符有两种工作方式:
-
mymap[2]- 在这种情况下,它会在 map 中查找键 2 并针对该键返回值。 -
mymap[2]=3- 在这种情况下,它会在 map 中查找键 2,如果未找到键,则在 map 中插入 3。
我看到这个运算符的声明看起来像:Mapped_T &operator[](const Key_T &); 但我没有得到的是,如果找不到密钥,我将不得不在 Map 中插入一个新元素,但在 operator[] 函数的声明中我看不到任何地方传递的价值。那么重载的运算符如何知道要插入的键的值是什么?
【问题讨论】:
-
它们都是同一种情况。写
X = Y在执行分配之前首先评估X和Y,并且无论上下文如何,X的评估方式相同。