如果我有std::map<double, Object> my_map
,引用this是以下等价物吗?
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;
答案 0 :(得分:5)
Object& obj = my_map[1];
Object obj = my_map[1];
这些不是等价的(如果没有别的,那就是完整的差异:))。第一个创建对映射中存在的对象的引用,第二个创建它的副本(并且它需要Object
的可访问复制构造函数。)
迭代器样式的行与调用operator[]
的前两行相同。