3

このページで説明されている値の初期化に従ってhttps://en.cppreference.com/w/cpp/language/value_initialization

T が、デフォルト コンストラクターを持たないが std::initializer_list を取るコンストラクターを持つクラス型である場合、リスト初期化が実行されます。

したがって、次のコードスニペットでクラスを初期化すると呼び出されると予想していましたMyclass(const std::initializer_list<int> &l)が、コンパイラは次のように述べています

> the default constructor of "Myclass" cannot be referenced -- it is a deleted function

何故ですか?これはコードです。Windows で Mingw64 C++11 を使用してコンパイルしました。

#include <iostream>
class Myclass {
    public:
     Myclass() = delete;
     Myclass(Myclass &&m) {}
     Myclass(const Myclass &m) {}
     Myclass(const std::initializer_list<int> &l) { std::cout << "initializer list"; }
};
int main(int argc, char const *argv[]) {
    Myclass m2 {};
     Myclass m1={};
}
4

2 に答える 2