向量中类元素的初始化

Posted

技术标签:

【中文标题】向量中类元素的初始化【英文标题】:Initialising of class elements in vector 【发布时间】:2014-10-15 06:31:25 【问题描述】:

我在下面有以下代码。我想知道为什么我的代码可以工作并打印 5 行零。 Node的成员不应该是未初始化的吗?

#include <vector>
#include <iostream>

struct Node
  int a1;
  int a2;
  double b;
  double c;
;

int main()
  std::vector<Node> nodevec(5);
  for(auto s : nodevec)
    std::cout << s.a2 << std::endl; // prints 5 lines of 0
  
  return 0;

编辑:

只是为了澄清我的问题,根据http://en.cppreference.com/w/cpp/container/vector/vector,它声明“3)使用 T 的计数值初始化(默认构造,对于类)实例构造容器。不制作副本。”既然 Node 是一个类,那么它不是默认构造的吗?像 Node 这样的类的默认构造不是意味着它的成员是未初始化的吗?

【问题讨论】:

不,向量的元素得到初始化的值,在这种情况下,这意味着成员是零初始化的 报价缺少一些重要信息。这个链接更完整:value initialization. 【参考方案1】:

如果您阅读例如this std::vector constructor reference 您将看到向量中的项目将使用 Node() 或值初始化。这两者对于 POD 类型是等效的,并且将对结构中的所有成员进行值初始化,即将所有成员设置为零。

【讨论】:

【参考方案2】:

向量构造函数将用值初始化的对象填充新元素。没有默认构造函数的类型的值初始化对象将所有数字成员初始化为零。

【讨论】:

以上是关于向量中类元素的初始化的主要内容,如果未能解决你的问题,请参考以下文章

从向量的元素初始化结构

为啥带有两个元素的初始化器语法将一个元素放入字符串向量而不是两个?

如何创建结构向量并稍后初始化它们

访问未初始化的元素时,std向量不会抛出out_of_range异常[重复]

python中类的初始化案例

java中类成员初始化顺序