【发布时间】:2018-02-17 07:58:40
【问题描述】:
std::vector<bool> 的特化,在 C++11 23.3.7/1 中指定,不声明 data() 成员(例如提到 here 和 here)。
问题是:为什么std::vector<bool> 没有.data()?这与为什么bools 的向量没有连续存储在内存中是同一个问题。不这样做有什么好处?
为什么不能返回指向bools 数组的指针?
【问题讨论】:
-
vector<bool>允许通过将多个布尔值打包在一个字节中来进行空间优化。data()将取消该好处。 -
好处是您使用的内存减少了 8 倍。缺点是你会破坏人们的期望。或多或少的结论是弊大于利。
-
std::vector<bool>有点像邀请你的婆婆和你住在一起。这在当时似乎是个好主意,但你最终会后悔整个想法。幸运的是,我只能将这些违规行为之一归功于自己。 -
@Bathsheba 您设计并实现了 std::vector
?你应该感到羞耻,我要向你岳母举报你。
标签: c++ memory vector boolean contiguous