2012-10-03 28 views
0

對於寫入/讀取文件,我使用元組和向量做了一些低級/二進制操作。 當我做std::vector<bool> v(8)std::tuple<bool, bool, bool, bool, bool, bool...>,我有保證布爾值不連接? (並且因此將載體和元組權重至少n個字節(其中n是布爾值的數目)元組和向量中的Bool連接?

+0

你是什麼意思與「串聯」?比特封裝?無論如何,你沒有'std :: vector '這樣的保證。 –

+0

是的,我的意思是位平分。如果它們是位打包的,那麼&v [0]和&v [1]的結果是什麼?他們指向相同的地址? – Vincent

回答

1

這是實現定義是否std::vector<bool>是位十足的它的界面。沒有提供任何方式來直接訪問bool值,因此試圖通過直接訪問底層數組,您肯定會在某個時刻被燒燬。

std::tuplestd::pair的概括。因此std::tuple<bool, bool, bool>相當於struct SomeStruct { bool a, b, c; };,換句話說,bool值不會被位打包。

-1

「載體專業化:矢量< BOOL> 載體類模板具有用於bool類型的特殊模板專業化。

這種專業化提供優化的空間分配:在這個模板專業化,每個元素只佔用一個位。」引述here