[英]Why does std::vector<bool> have no .data()?
為什么 std::vector 沒有 .data()?
因為std::vector<bool>
在 1 個字節中存儲多個值。
把它想象成一個壓縮存儲系統,其中每個布爾值都需要 1 位。 因此,不是每個內存塊一個元素(每個數組單元一個元素),內存布局可能如下所示:
假設您想索引一個塊以獲得一個值,您將如何使用運算符[]
? 它不能返回bool&
(因為它將返回一個字節,它存儲多個bools
),因此您不能為其分配bool*
。 換句話說bool *bool_ptr =&v[0];
不是有效代碼,會導致編譯錯誤。
此外,正確的實現可能沒有這種專業化並且不進行內存優化(壓縮)。 因此data()
必須根據實現復制到預期的返回類型(或者標准應該強制優化而不是僅僅允許它)。
為什么不能返回指向布爾數組的指針?
因為std::vector<bool>
不存儲為std::vector<bool>
數組,因此不能以直接的方式返回指針。 它可以通過將數據復制到數組並返回該數組來做到這一點,但不這樣做是一種設計選擇(如果他們這樣做了,我會認為這可以作為所有容器的data()
,這會產生誤導) .
不這樣做有什么好處?
內存優化。
通常內存使用量減少 8 倍,因為它在單個字節中存儲了多個位。 准確地說, CHAR_BIT
時間要少一些。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.