map使用笔记
先上代码
1 class T 2 { 3 public: 4 T() 5 : _nval(20) 6 { 7 std::cout << "T::T()... \n"; 8 } 9 ~T() 10 { 11 std::cout << "T::~T()...\n"; 12 } 13 14 int val() const 15 { 16 return _nval; 17 } 18 19 private: 20 int _nval; 21 }; 22 23 void test_map() 24 { 25 std::map<int ,T> key2val_mp; 26 27 T t ; 28 t = key2val_mp[2]; 29 30 std::map<int, T>::const_iterator it = key2val_mp.begin(); 31 32 for (it ; it != key2val_mp.end(); ++it) 33 { 34 std::cout << "it->first = " << it->first << "\t" << "it->second.val() = " << it->second.val() << std::endl; 35 } 36 37 std::cout << "Finished...\n"; 38 39 } 40 41 int main(int argc, char* argv[]) 42 { 43 test_map(); 44 45 return 0; 46 }
运行结果如下:
由上面的结果我们发现在test_map()函数中发生了两次构造,我们知道第一次构造是在:T t;处
那么第二次的构造就应该是在 t = key2val_mp[2]处了,由此我们可以得出结论key2val_mp[2]返回了一个临时对象;