Sesuai standar C ++ n4713 , cuplikan kode yang sangat mirip disediakan. Jenis yang digunakan adalah BOOL
(khusus), tetapi dapat diterapkan ke jenis apa pun.
12.2.4
4 Jika nilai benar atau salah disimpan ke dalam bidang bitbool
dengan ukuran berapa pun (termasuk bidang bit satu), nilai aslibool
dan nilai bidang bit akan dibandingkan sama. Jika nilai pencacah disimpan ke dalam bit-field dari jenis enumerasi yang sama dan jumlah bit dalam bit-field cukup besar untuk menampung semua nilai dari jenis enumerasi tersebut (10.2), nilai enumerator asli dan nilai bit-field akan membandingkan sama . [Contoh:
enum BOOL { FALSE=0, TRUE=1 };
struct A {
BOOL b:1;
};
A a;
void f() {
a.b = TRUE;
if (a.b == TRUE) // yields true
{ /* ... */ }
}
- contoh akhir]
Pada pandangan pertama, bagian tebal tampak terbuka untuk interpretasi. Namun, maksud yang benar menjadi jelas saat enum BOOL
diturunkan dari int
.
enum BOOL : int { FALSE=0, TRUE=1 }; // ***this line
struct mystruct { BOOL enabled:1; };
int main()
{
struct mystruct s;
s.enabled = TRUE;
if(s.enabled == TRUE)
printf("Is enabled\n"); // --> we think this to be printed
else
printf("Is disabled !!\n");
}
Dengan kode di atas memberikan peringatan tanpa -Wall -pedantic
:
peringatan: 'mystruct :: enabled' terlalu kecil untuk menampung semua nilai 'enum BOOL'
struct mystruct { BOOL enabled:1; };
Outputnya adalah:
Dinonaktifkan !! (saat menggunakan enum BOOL : int
)
Jika enum BOOL : int
dibuat sederhana enum BOOL
, maka outputnya seperti yang ditentukan pasage standar di atas:
Diaktifkan (saat menggunakan enum BOOL
)
Oleh karena itu, dapat disimpulkan, seperti beberapa jawaban lain yang dimiliki, int
tipe tersebut tidak cukup besar untuk menyimpan nilai "1" hanya dalam satu bit-field.
int
menurut saya hanya dapat menampung nilai0
dan-1
.