在向量中初始化类元素

时间:2014-10-15 06:31:26

标签: c++ initialization

我在下面有以下代码。我想知道为什么我的代码工作并打印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这样的类的默认构造是不是意味着它的成员是未初始化的?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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