换句话说,当
i
是map<K,V>::iterator
时,执行以下操作提供了预期的语义(即修改了map):*i = make_pair(k, v);
i->first = k;
i->second = v;
更新: 前两行是无效的,因为operator*
的返回值是一个可转换为pair<const K, V>
的类型。第三行呢?
假设对于这三个问题都回答肯定,那么这意味着:
- 要么
map<K,V>
元素被存储在某个地方作为pair<K,V>
, - 要么有一些聪明的代理类,
map<K,V>::iterator::operator*
返回该类的实例。在这种情况下,operator->
如何实现?
*i
返回的是对pair对象的引用,还是一个pair对象,或者是可转换为pair
但提供左值语义的一些代理类。 - Alexandre C.