压缩bools在C++中的std :: vector功能

W.J*_*Joe 5 c++ boolean vector

C++中的std :: vector是否会压缩?我的意思是我已经读过std :: vector可以将8个布尔值组合成1个字节.但是,当我在visual studio中尝试此代码时,

#include <vector>
#include <iostream>
using namespace std;

int main()
{
    vector<bool> array {true, false, false, true, true,false,false,true};
    cout << sizeof(array) << endl;
    cout << sizeof(array[0]) << endl;

    getchar();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它打印:

24
16
Run Code Online (Sandbox Code Playgroud)

而在另一个IDE中,例如代码块,它打印20和8.

我不太清楚这里的布尔值.

Dre*_*ann 15

C++中的std :: vector是否会压缩?

是的,允许这样做,通常会这样做.

我不太清楚这里的布尔值.

你实际上没有得到array[0]评估的东西.

它不计算为一个.它评估为一个正确处理转换和赋值的代理对象.boolbool

sizeof此代理并没有太大的意义.这不是一点点或一个布尔的大小.它是一个被编程为对特定位进行操作的对象的大小.

  • @ W.Joe这是一个新问题,可能是一个非常有趣的问题! (7认同)
  • @ W.Joe如果该条件评估为假,那么这是一个标志,你的向量确实可能会压缩布尔值(所以这并不奇怪).这个测试的想法是,如果`std :: vector <bool>`不"压缩"布尔值,`array [0]`可能是一个`bool&`(因为它只能存储,例如,动态分配布尔数组并返回对内存中相应布尔值的引用)使条件成立.否则,`array [0]`必须是一个代理对象(通常大于布尔值),因此条件很可能是假的. (2认同)