c++ - 为什么带有默认参数 std::initializer_list 的 ctor 不可用(VS2019)?
问题描述
我不太明白为什么这段代码不能在 Visual Studio 2019 (16.8.3) 上编译:
#include <initializer_list>
struct Foo
{
Foo(std::initializer_list<int> = {});
};
int main()
{
Foo f;
}
Foo::Foo(std::initializer_list<int>) {}
它给了我这个错误:
C2512:“Foo”:没有合适的默认构造函数可用
这是编译器错误还是我在这里遗漏了什么?请注意,我已经检查过了,这确实在 GCC 10.1 上编译
如果将构造函数的前向声明更改为立即定义,则代码编译不会出错:
#include <initializer_list>
struct Foo
{
Foo(std::initializer_list<int> = {}) {}
};
int main()
{
Foo f;
}
解决方案
这里有一个编译器错误。
它不应该仅仅因为构造函数的定义在同一个翻译单元中不可用而导致编译失败(在另一个翻译单元中提供它,或者甚至在下面提供它main
,都不允许程序构建)。
如果你换掉它std::initializer_list
,int
一切都会按预期工作。
我已将此问题报告给 Microsoft。(可用时添加链接)
推荐阅读
- c - printf() 和 scanf() 的行为| 如何知道内置函数的工作方式?
- android - 在 Intent Service 类中使用 Retrofit 2
- android - 使用 ViewModel 构造函数而不是 ViewModelProvider 能够根据参数从 Room 数据库中获取数据
- javascript - 具有动态字段的动态组合框
- javascript - 以角度传递带有模板语法的SVG路径
- scripting - Discord 脚本可在朋友不在频道中的情况下向他们发送私人消息
- typescript - npm 包的简单导入语句
- r - 如何将值移动到 R 中另一个数据框中的空单元格?
- docker - 安装 scikit-image 时没有名为“numpy”的模块
- javascript - 如何将图表数据显示为html表格chartjs