我想了解如何初始化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