C++ 初始化此类时为什么不调用列表初始化?
根据本页所述的值初始化 如果T是一个类类型,它没有默认构造函数,但有一个构造函数采用std::initializer\u list,则执行列表初始化 所以我希望在下面的代码片段中初始化类时调用C++ 初始化此类时为什么不调用列表初始化?,c++,c++11,initialization,list-initialization,value-initialization,C++,C++11,Initialization,List Initialization,Value Initialization,根据本页所述的值初始化 如果T是一个类类型,它没有默认构造函数,但有一个构造函数采用std::initializer\u list,则执行列表初始化 所以我希望在下面的代码片段中初始化类时调用Myclass(const std::initializer\u list&l),但是编译器说 > the default constructor of "Myclass" cannot be referenced -- it is a deleted function 为什么呢
Myclass(const std::initializer\u list&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={};
}
#包括
类Myclass{
公众:
Myclass()=删除;
Myclass(Myclass&&m){}
Myclass(常量Myclass&m){}
Myclass(const std::initializer_list&l){std::coutCheckout。简而言之:
- 如果默认构造函数被显式删除,编译器将假定不存在任何默认构造函数
- 但是,如果删除
Myclass()=delete;
行,它将选择最好的构造函数,也就是您的initialized\u列表
Myclass
确实有一个默认构造函数;它只是显式标记为delete
。因此值初始化的效果应该是:
如果T是没有默认构造函数的类类型,或者是用户提供或删除了默认构造函数的类类型,则对象为
在“已删除”对话框中,选择了默认构造函数,并且程序格式不正确
如果不将默认构造函数声明为
class Myclass {
public:
// Myclass() = delete;
Myclass(Myclass &&m) {}
Myclass(const Myclass &m) {}
Myclass(const std::initializer_list<int> &l) { std::cout << "initializer list"; }
};
class-Myclass{
公众:
//Myclass()=删除;
Myclass(Myclass&&m){}
Myclass(常量Myclass&m){}
Myclass(const std::initializer_list&l){std::cout“如果T
是一个没有默认构造函数的类类型…”,但是T
确实有一个默认构造函数,该构造函数将被删除。