非法使用已删除的功能

时间:2018-03-14 19:27:09

标签: c++ c++11 c++14 deleted-functions

我有一个A级

struct A
{
    A() = delete;
    A(const A&) = default;
    A& operator=(const A&) = default;
    A(A&&) = default;
    A& operator=(A&&) = default;

    explicit A(int i) ....
    // a few explicit constructors
}

当我试图获得存储在unordered_map中的strcut A时,如下所示:

auto a = my_map[key_];

我得到了

  

非法使用已删除的方法

错误。 我的理解是这是一个复制构造,但我不知道为什么编译器会在分配之前调用默认构造函数。

1 个答案:

答案 0 :(得分:5)

来自http://en.cppreference.com/w/cpp/container/map/operator_at

  

mapped_type必须满足CopyConstructible和DefaultConstructible的要求。

由于删除了默认构造函数,编译器会正确报告错误。

在链接页面中进一步向下:

  

返回值

     

如果不存在具有键键的元素,则引用新元素的映射值。否则,引用其键等效于key的现有元素的映射值。

如果不存在具有给定键的元素,则该函数会插入新元素。需要一个默认构造函数才能插入新元素。