gpt4 book ai didi

c++ - 为什么带有默认参数 std::initializer_list 的 ctor 不可用(VS2019)?

转载 作者:行者123 更新时间:2023-12-03 09:38:18 24 4
gpt4 key购买 nike

我不太明白为什么这段代码不能在 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": no appropriate default constructor available


这是编译器错误还是我在这里遗漏了什么?
请注意,我已经检查过,这确实在 GCC 10.1 上编译
如果将构造函数的前向声明更改为直接定义,则代码编译时不会出错:
#include <initializer_list>

struct Foo
{
Foo(std::initializer_list<int> = {}) {}
};

int main()
{
Foo f;
}

最佳答案

这里有一个编译器错误。
它不应该仅仅因为构造函数的定义在同一个翻译单元中不可用(在另一个翻译单元中提供它,或者甚至在 main 下提供它,不允许程序构建)而导致编译失败。
如果交换 std::initializer_listint这一切都按预期工作。
我已将此问题报告给 Microsoft。 (可用时将添加链接)

关于c++ - 为什么带有默认参数 std::initializer_list 的 ctor 不可用(VS2019)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65243400/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com