将const对vs非const对vs非const插入unordered_map

时间:2019-06-27 18:55:59

标签: c++ c++11 unordered-map std-pair

我观看了这段CppCon视频: https://youtu.be/ncHmEUmJZf4?t=2284(时间38:04)

我不知道呼叫之间有什么区别

std::pair<iterator,bool> insert( const value_type& value );

std::pair<iterator,bool> insert( value_type&& value );

我编写了自己的代码,看起来在两种情况下都调用了相同的构造函数。

#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;

struct A
{
  A() noexcept                      {cout << "A()" << endl; }
  A(const A&) noexcept              {cout << "A(const A&)" << endl;}
};


int main()
{
    unordered_map<int, A> m;
    const pair<const int, A> p = {}; //first case OK
    //pair<const int, A> p = {};    //second case NOK
    //const pair<int, A> p = {};    //third case NOK
    cout << "---------" << endl;
    {
        m.insert(p);
        m.insert(p);
        m.insert(p);
        m.insert(p);
    }
    cout << "---------" << endl;
}

第一种情况的输出:

A()
---------
A(const A&)
---------

第二和第三种情况的输出:

A()
---------
A(const A&)
A(const A&)
A(const A&)
A(const A&)
---------

1)为什么对必须为const才能不进行复制? (第二种情况)

2)为什么键必须为const才能不进行复制(定义中unordered_map的键为非const)? (第三种情况)

0 个答案:

没有答案