Я только что сделал тест с битовыми полями, и результаты удивляют меня.
class test1 {
public:
bool test_a:1;
bool test_b:1;
bool test_c:1;
bool test_d:1;
bool test_e:1;
bool test_f:1;
bool test_g:1;
bool test_h:1;
};
class test2 {
public:
int test_a:1;
int test_b:1;
int test_c:1;
int test_d:1;
int test_e:1;
int test_f:1;
int test_g:1;
int test_h:1;
};
class test3 {
public:
int test_a:1;
bool test_b:1;
int test_c:1;
bool test_d:1;
int test_e:1;
bool test_f:1;
int test_g:1;
bool test_h:1;
};
Результатами был:-
sizeof(test1) = 1 // This is what I'd expect. 8 bits in a byte
sizeof(test2) = 4 // Reasonable. Maybe padded out to the size of an int.
sizeof(test3) = 16 // What???
Это то, что Вы ожидали бы, или ошибка компилятора? (Разработчик C++ Codegear 2007, btw...)
#include <iostream>
using namespace std;
bool ary_bool4[10];
struct MyStruct {
bool a1 :1;
bool a2 :1;
bool a3 :1;
bool a4 :1;
char b1 :2;
char b2 :2;
char b3 :2;
char b4 :6;
char c1;
};
int main() {
cout << "char size:\t" << sizeof(char) << endl;
cout << "short int size:\t" << sizeof(short int) << endl;
cout << "default int size:\t" << sizeof(int) << endl;
cout << "long int size:\t" << sizeof(long int) << endl;
cout << "long long int size:\t" << sizeof(long long int) << endl;
cout << "ary_bool4 size:\t" << sizeof(ary_bool4) << endl;
cout << "MyStruct size:\t" << sizeof(MyStruct) << endl;
// cout << "long long long int size:\t" << sizeof(long long long int) << endl;
return 0;
}
char size: 1
short int size: 2
default int size: 4
long int size: 4
long long int size: 8
ary_bool4 size: 10
MyStruct size: 3