c++ - vector 中类元素的初始化

标签 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 这样的类的默认构造是否意味着它的成员是未初始化的?

最佳答案

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

关于c++ - vector 中类元素的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26375897/

相关文章:

c++ - OpenACC 和面向对象的 C++

c++ - 保证在突然终止或退出期间在 C++ 中调用的函数

c++ - 函数采用预期大小的数组,向用户发出信号

c++ - 没有用于初始化“listNode 结构”的匹配构造函数

c++ - 使用匿名结构初始化会在堆栈上放置额外的拷贝吗?

c++ - C++ 开源前端的选项

c++ - "MyClass a(anotherInstance);"比 "MyClass a = anotherInstance;"快吗?

servlets - 使用特殊的自动启动 servlet 在启动时进行初始化并共享应用程序数据

c - 用字节和字符串文字初始化 C 数组

c++ - 如何在 C++ 函数中将静态数组初始化为某个值?