0

私はクラス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_];

私は得る

削除されたメソッドの不正使用

エラー。私の理解では、これはコピーの構築ですが、コンパイラが代入の前にデフォルトのコンストラクタを呼び出す理由はわかりません。

4

1 に答える 1

5

http://en.cppreference.com/w/cpp/container/map/operator_atから:

mapping_type は、CopyConstructible および DefaultConstructible の要件を満たす必要があります。

デフォルトのコンストラクターが削除されているため、コンパイラーは正しくエラーを報告します。

リンクされたページのさらに下:

戻り値

キー key を持つ要素が存在しない場合、新しい要素のマップされた値への参照。それ以外の場合は、キーが key と等しい既存の要素のマップされた値への参照。

指定されたキーを持つ要素が存在しない場合、関数は新しい要素を挿入します。新しい要素を挿入できるようにするには、デフォルトのコンストラクターが必要です。

于 2018-03-14T19:30:52.670 に答える