参考这个,如果我有std::map<double, Object> my_map,是以下等价物?
Object& obj = my_map[1];
Object obj = my_map[1];
我知道operator[]通过引用返回,第一种方式,正确的方法,而不是创建副本,或者它们是相同的.如果它们是相同的,我不确定它们为什么会这样.
同样,如果我也有......
std::map<double, Object>::iterator it;
以下是类似的吗?
Object& obj = it->second;
Object obj = it->second;
Object& obj = my_map[1];
Object obj = my_map[1];
这些并不等同(如果没有别的,那就是完整的差异:)).第一个创建对映射中存在的对象的引用,第二个创建它的副本(并且它需要可访问的复制构造函数Object).
迭代器样式的行与调用的前两行相同operator[].