[英]Initialize a std::vector of structures to zero
我保证用该代码初始化一个结构向量,每个元素都初始化为零?
#include <vector>
struct A {
int a, b;
float f;
};
int main()
{
// 100 A's initialized to zero (a=0, b=0, f=0.0)
// std::vector<A> my_vector(100, {}); does not compile
std::vector<A> my_vector(100, A{});
}
简短的回答:是的
要知道如何参考下面:当你写
std::vector<A> my_vector(...)
如果括号为空,则进行 值初始化,如果括号非空,则进行直接初始化。
并且当您编写 A{} 时,您正在执行 列表初始化,如果大括号为空,则意味着值初始化,或者如果初始化的 object 是聚合,则表示聚合初始化。
因为你的括号是非空的所以下面的代码
std::vector<A> my_vector(100, A{});
被解释为
std::vector<A> my_vector(/*created vector of 100 elements */ 100, /* by list Initialization of struct with default values*/A{});
由于 A{} 在这种情况下为空,因此您正在进行值初始化,这将导致zero_initialization为
- 作为非类类型和没有构造函数的值初始化 class 类型的成员的值初始化序列的一部分,包括未提供初始化器的聚合元素的值初始化。
是的,因为A{}
是值初始化并且来自cppreference ,所以可以保证:
在以下情况下执行零初始化:
- 作为非类类型和没有构造函数的值初始化 class 类型的成员的值初始化序列的一部分,包括未提供初始化器的聚合元素的值初始化。
您还可以使用:
std::vector<A> my_vector(100, {0,0,0});
是的,您可以保证使用该代码进行零初始化
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.