chrono的作者声称here如果你有一个chrono::seconds的向量,它在默认情况下不会初始化。我想知道这是如何准确的,例如,如果我初始化一个结构体的向量,它 Package 了一个int,例如Assert永远不会触发下面。这是与零初始化页面分配有关还是标准保证了这一点?
#include <vector>
#include <cassert>
struct X {
int y;
};
int main() {
std::vector<X> vec(10);
for (auto &el : vec) {
assert(el.y == 0);
}
}
2条答案
按热度按时间1tuwyuhd1#
例如,如果您阅读this
std::vector
constructor reference,则定义是引用列表中的第4号(从C++11开始),它使用default insertion作为元素。
默认插入执行(* 默认 *)value initialization,而对于类似于您的结构的 * 聚合 *,它执行aggregate initialization,这反过来又会使您成为
int
成员从空初始值设定项列表复制初始化
会把它设为零。
有许多步骤要执行,但最终都以将所有
y
成员初始化为零的良好定义的行为结束。yebdmbv42#
看起来他指的是 array 而不是vector,因为vector元素总是被初始化的。