C++17 为什么传入参数时没有提供默认构造函数

Nev*_*ind 1 c++ constructor initialization

我有这门课:

\n
class MyClass {\npublic:\n    int someMember;\n    std::vector<int> someVectorMember;\n};\n
Run Code Online (Sandbox Code Playgroud)\n

我想知道为什么这行不通:

\n
MyClass(1, std::vector<int>{1,2});\n
Run Code Online (Sandbox Code Playgroud)\n

错误:

\n
main.cpp:21:37: error: no matching function for call to \xe2\x80\x98MyClass::MyClass(int, std::vector)\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n

use*_*570 7

问题是您传递了两个参数,其中第一个参数是类型int,第二个参数是类型std::vector<int>,而没有这样的构造函数接受上述类型的两个参数。另请注意,在 C++17 中,MyClass 聚合初始化无法使用括号进行工作。


在 C++20 中,虽然聚合初始化可以使用括号,所以这将在 c++20 中按照p0960: 允许从括号值列表初始化聚合


为什么没有提供默认构造函数

有一个编译器MyClass::MyClass() 隐式生成的默认ctor ,只是它不能用于MyClass(1, std::vector<int>{1,2})