考虑以下代码
std::vector<std::array<double,10>> a(10);如果我正确地理解了标准,a将不会被零初始化,因为en.cppreference.com上的std::向量构造函数说
因此,因为默认初始化std::array<double, 10>不会用零填充它,所以a也不会包含零。
这是真的吗?
如何执行零初始化?
a.data()会指向100个连续的double值吗?
编辑:
这是来自-O2 gcc 10.2的哥德螺栓的输出。
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所以它看起来是零初始化的。那么问题仍然是为什么。
发布于 2021-03-30 17:30:46
发布于 2021-03-30 17:35:29
发布于 2021-03-30 17:33:24
您可以这样做,如下面的演示程序所示:
#include <iostream>
#include <array>
#include <vector>
int main()
{
std::vector<std::array<double,10>> v(10, { {} } );
for ( const auto &a : v )
{
for ( const auto &item : a )
{
std::cout << item << ' ';
}
std::cout << '\n';
}
return 0;
}程序输出是
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 https://stackoverflow.com/questions/66875565
复制相似问题