我希望在将std :: vector调整为所需的容器大小后,我的std :: vector中的所有条目都为false.这似乎是测试的情况,但我似乎无法找到任何保证始终如此的文档.
我意识到我可以将自己设置为假,但如果已经保证每个条目默认为false(这是一个体面的大小的矢量,并且将在数千个地方创建),这似乎效率低下.
这有什么保证吗?提前致谢.
use*_*267 22
resize 将默认插入元素,通过(C++ 11)标准调用:
allocator_traits<bool>::construct(m, p)
m分配器在哪里,并p指向目标地址.
这反过来(假设m是标准分配器)调用
m.construct(p)
反过来打电话
::new((void *)p) bool()
所以你bool最终会被初始化,这bool意味着零初始化,这意味着false.
如果m是自定义分配器并且由于某种原因缺失construct(),它仍然最终被初始化.
正如已经指出的那样std::vector<bool>,不使用标准分配器,仍然resize()被定义为
void resize(size_type sz, bool c = false);
所以结果是一样的.
是的,astd::vector<bool>是用零字节初始化的,在大多数机器上这是false(初始化 -s 的默认值bool)。
请参阅std::vector上的注释