c++ - C++11 中的混合列表初始化
问题描述
参考c++11 列表初始化,我可以用一个元素和另一个列表初始化一个列表吗?
假设我有以下代码:
#include <vector>
class Foo
{
public:
Foo(int value){m_v=value;}
private:
int m_v = 0;
};
int main()
{
std::vector<Foo> v1, v2, v3;
v1 = {Foo(1)}; //ok
v2 = {Foo(2), Foo(3)}; //ok
v3 = {Foo(3), v2}; //error: no match for ‘operator=’ (operand types are ‘std::vector’ and ‘’)
}
有没有办法在一行代码中使用列表初始化创建一个由另一个向量的元素加上一个新元素组成的向量(在上面的示例中是一个前置)。
解决方案
std::vector<Foo>
表示一个std::vector
实例Foo
。这意味着它不能任意存储其他std::vector
实例,这是您在编写时询问编译器的内容
v3 = {Foo(3), v2};
std::initializer_list<T>
是T
实例的同质集合。std::vector<Foo>
的列表构造函数采用std::initializer_list<Foo>
. v2
如果不手动解包花括号内的 's 元素,就无法实现您想要的。
有没有办法在一行代码中使用列表初始化创建一个由另一个向量的元素加上一个新元素组成的向量(在上面的示例中是一个前置)。
使用列表初始化,没有。但是,您可以编写自己的函数来实现相同的目的。
推荐阅读
- kubernetes-helm - 如何在 job.yaml 文件中以 Helm 图表语法编写以下条件?
- postgresql - Postgresql - 对附加到 timescaledb 的简单选择语句的慢速运行查询
- sockets - Socket.IO Kubernetes
- azure - 将两个不同的子域映射到一个 Azure 应用服务计划(内部包含两个不同的应用服务)
- junit - PowerMockito 验证对不同类的两个方法的静态调用
- java - 无法反序列化超出 START_ARRAY 令牌的实例
- c# - 如何在stimulsoft报告中添加两个业务对象之间的关系
- flutter - 在 Futurebuilder 中用于空值的空值检查运算符
- redirect - 您可以在 Joomla 的重定向组件中的 URL 重定向中使用某种通配符吗?
- python-3.x - 如何从 callback_query 对象编辑内联键盘?