Gereği C ++ standart n4713 , çok benzer bir kod parçacığını sağlanır. Kullanılan tür BOOL
(özel), ancak her tür için geçerli olabilir.
12.2.4
4 Doğru veya yanlış değeribool
, herhangi bir boyuttaki (bir bitlik alan dahil)tipteki bir bit alanına saklanırsa, orijinalbool
değer ve bit alanının değeri eşit olarak karşılaştırılmalıdır. Numaralandırıcının değeri aynı numaralandırma türündeki bir bit alanında depolanırsa ve bit alanındaki bit sayısı, bu numaralandırma türünün (10.2) tüm değerlerini, orijinal numaralandırıcı değeri ve bit alanının değeri eşit karşılaştırılacaktır . [ Misal:
enum BOOL { FALSE=0, TRUE=1 };
struct A {
BOOL b:1;
};
A a;
void f() {
a.b = TRUE;
if (a.b == TRUE)
{ }
}
- son örnek]
İlk bakışta kalın kısım yoruma açık görünür. Bununla birlikte, doğru niyet açık hale enum BOOL
türetilir int
.
enum BOOL : int { FALSE=0, TRUE=1 };
struct mystruct { BOOL enabled:1; };
int main()
{
struct mystruct s;
s.enabled = TRUE;
if(s.enabled == TRUE)
printf("Is enabled\n");
else
printf("Is disabled !!\n");
}
Yukarıdaki kod ile şunların olmadığı bir uyarı verir -Wall -pedantic
:
uyarı: 'mystruct :: enabled', 'enum BOOL'un tüm değerlerini tutamayacak kadar küçük
struct mystruct { BOOL enabled:1; };
Çıktı:
Devre dışı bırakıldı !! (kullanırken enum BOOL : int
)
Eğer enum BOOL : int
basit yapılır enum BOOL
, daha sonra çıkış yukarıdaki standart pasage belirttiği gibidir:
Etkinleştirildi (kullanırken enum BOOL
)
Bu nedenle, diğer birkaç yanıtın da sahip olduğu gibi, bu türün "1" değerini yalnızca tek bir bit alanında depolayacak kadar büyük olmadığı sonucuna varılabilir int
.
int
ben yalnızca değerleri tutabilir düşünmek0
ve-1
.