我想了解如何初始化std :: map。我看到在网络上初始化地图的方式如下(注意Test& t = mylist[0]
部分):为什么这个特殊的std :: map初始化工作?
#include <iostream>
#include <map>
using namespace std;
class Test
{
public:
Test():i_(0) { cout<<"Calling constructor"<<endl;}
~Test() { cout <<"Calling destructor"<<endl;}
private:
int i_;
};
int main(int argc, char **argv)
{
map<unsigned,Test> mylist;
cout << "Before "<<mylist.size()<<endl;
Test& t = mylist[0];
cout << "After "<<mylist.size()<<endl;
return 0;
}
天真,我本来期望以下工作,
Test t;
mylist[0] = t;
但它伤害了我的大脑思考为什么第一种方法正常工作!对象如何初始化?是否是暂时的,因为在技术上仅仅写入表达mylist[0];
会创建一个对象(但是怎么样?)
在此先感谢!
如果操作符[]不存在,则将其插入到映射中。因此,地图中有一个有效的对象用于参考。 – chris
@chris听起来像是对我的回答。 – Corbin
@chris谢谢你!我查了一下操作符[],如果不存在,它肯定会插入一个新元素。干杯! – covariantmonkey