Unl*_*kus 1 c++ initialization vector stdarray
考虑以下代码
std::vector<std::array<double,10>> a(10);
Run Code Online (Sandbox Code Playgroud)
如果我正确理解标准a将不会被零初始化,因为 std::vector 构造函数上的 en.cppreference.com 说
- 使用 count 个默认插入的 T 实例构造容器。不制作副本。
所以因为默认初始化std::array<double, 10>不会用零填充它,a也不会包含零。
这是真的?
如何强制执行零初始化?
会a.data()指向100个连续double值吗?
编辑:
这是godbolt在gcc 10.2上使用-O2的输出
main:
mov edi, 800
sub rsp, 8
call operator new(unsigned long)
mov rdi, rax
lea rdx, [rax+800]
.L2:
mov QWORD PTR [rax], 0x000000000
add rax, 80
mov QWORD PTR [rax-72], 0x000000000
mov QWORD PTR [rax-64], 0x000000000
mov QWORD PTR [rax-56], 0x000000000
mov QWORD PTR [rax-48], 0x000000000
mov QWORD PTR [rax-40], 0x000000000
mov QWORD PTR [rax-32], 0x000000000
mov QWORD PTR [rax-24], 0x000000000
mov QWORD PTR [rax-16], 0x000000000
mov QWORD PTR [rax-8], 0x000000000
cmp rdx, rax
jne .L2
mov esi, 800
call operator delete(void*, unsigned long)
xor eax, eax
add rsp, 8
ret
Run Code Online (Sandbox Code Playgroud)
所以它似乎是零初始化。那么问题仍然是为什么。