gpt4 book ai didi

c++ - 我可以使用 C++11 大括号初始化语法来避免为简单聚合声明琐碎的构造函数吗?

转载 作者:IT老高 更新时间:2023-10-28 22:35:40 26 4
gpt4 key购买 nike

假设我有以下代码:

#include <vector>

struct Foo
{
int tag = 0;
std::function<void ()> code;
};

int main()
{
std::vector<Foo> v;
}

现在我想用特定的 tagcode 没有 向 vector 添加一个新的 Foo 项> 显式地创建一个临时的。这意味着我必须为 Foo 添加一个构造函数:

struct Foo
{
inline Foo(int t, std::function<void ()> c): tag(t), code(c) {}

int tag = 0;
std::function<void ()> code;
};

现在我可以使用 emplace_back:

v.emplace_back(0, [](){});

但是当我不得不再次这样做——第 100 次——使用新创建的结构时,我想:我不能使用大括号初始化器吗?像这样:

#include <vector>

struct Foo
{
int tag = 0;
std::function<void ()> code;
};

int main()
{
std::vector<Foo> v;
v.push_back(Foo{ 0, [](){} });
}

这给了我一个编译错误(无法从 'initializer-list' 转换为 'Foo'),但我希望可以做到这一点,我只是语法错误。

最佳答案

在 C++11 中,您不能将 聚合初始化器struct 一起使用,因为您使用了 equal 初始化器 -静态成员标签。删除 = 0 部分,它将起作用:

#include <vector>
#include <functional>

struct Foo
{
int tag;
std::function<void ()> code;
};

int main()
{
std::vector<Foo> v;
v.push_back(Foo{ 0, [](){} });
}

关于c++ - 我可以使用 C++11 大括号初始化语法来避免为简单聚合声明琐碎的构造函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30696528/

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