Vio*_*ffe 14 c++ initialization initializer-list c++11 list-initialization
假设我有以下代码:
#include <vector>
struct Foo
{
int tag = 0;
std::function<void ()> code;
};
int main()
{
std::vector<Foo> v;
}
Run Code Online (Sandbox Code Playgroud)
现在我想要Foo使用特定的向量向量添加新项目,tag而code 不是明确创建临时项目.这意味着我必须添加一个构造函数Foo:
struct Foo
{
inline Foo(int t, std::function<void ()> c): tag(t), code(c) {}
int tag = 0;
std::function<void ()> code;
};
Run Code Online (Sandbox Code Playgroud)
现在我可以使用emplace_back:
v.emplace_back(0, [](){});
Run Code Online (Sandbox Code Playgroud)
但是当我不得不再次这样做 - 第100次 - 使用新创建的结构时,我想:我不能使用大括号初始化器吗?像这样:
#include <vector>
struct Foo
{
int tag = 0;
std::function<void ()> code;
};
int main()
{
std::vector<Foo> v;
v.push_back(Foo{ 0, [](){} });
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个编译错误(无法从'initializer-list'转换为'Foo'),但我希望这可以完成,我只是语法错了.
Ste*_*ppo 14
在C++ 11中,您不能将聚合初始值设定项与您一起使用,struct因为您对非静态成员使用了相同的初始值设定项tag.删除= 0部件,它将工作:
#include <vector>
#include <functional>
struct Foo
{
int tag;
std::function<void ()> code;
};
int main()
{
std::vector<Foo> v;
v.push_back(Foo{ 0, [](){} });
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1577 次 |
| 最近记录: |