operator []根据变量类型返回引用或复制

时间:2014-02-08 23:12:31

标签: c++ map reference

如果我有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;

1 个答案:

答案 0 :(得分:5)

Object& obj = my_map[1];
Object obj = my_map[1];

这些不是等价的(如果没有别的,那就是完整的差异:))。第一个创建对映射中存在的对象的引用,第二个创建它的副本(并且它需要Object的可访问复制构造函数。)

迭代器样式的行与调用operator[]的前两行相同。