ตามมาตรฐาน C ++ n4713จะมีข้อมูลโค้ดที่คล้ายกันมาก ประเภทที่ใช้คือBOOL(กำหนดเอง) แต่สามารถใช้กับประเภทใดก็ได้
12.2.4
4ถ้าค่าจริงหรือเท็จถูกเก็บไว้ในบิตฟิลด์ของชนิดboolขนาดใดก็ได้ (รวมถึงฟิลด์บิตหนึ่งบิต)boolค่าดั้งเดิมและค่าของบิตฟิลด์จะต้องเปรียบเทียบกัน ถ้าค่าของตัวแจงนับถูกเก็บไว้ในบิตฟิลด์ของประเภทการแจงนับเดียวกันและจำนวนบิตในฟิลด์บิตมีขนาดใหญ่พอที่จะเก็บค่าทั้งหมดของประเภทการแจงนับนั้น (10.2) ค่าตัวนับดั้งเดิมและ ค่าของบิตทุ่งจะเปรียบเทียบเท่ากับ [ตัวอย่าง:
enum BOOL { FALSE=0, TRUE=1 };
struct A {
BOOL b:1;
};
A a;
void f() {
a.b = TRUE;
if (a.b == TRUE)
{ }
}
- ตัวอย่างตอนท้าย]
เมื่อมองแวบแรกส่วนที่เป็นตัวหนาจะเปิดให้ตีความได้ อย่างไรก็ตามเจตนาที่ถูกต้องจะชัดเจนเมื่อenum BOOLได้มาจากไฟล์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");
}
ด้วยรหัสด้านบนจะให้คำเตือนโดยไม่มี-Wall -pedantic:
คำเตือน: 'mystruct :: enable' มีขนาดเล็กเกินไปที่จะเก็บค่าทั้งหมดของ 'enum BOOL'
struct mystruct { BOOL enabled:1; };
ผลลัพธ์คือ:
ถูกปิดใช้งาน !! (เมื่อใช้enum BOOL : int)
หากenum BOOL : intทำให้เรียบง่ายenum BOOLผลลัพธ์จะเป็นไปตามมาตรฐานด้านบนระบุ:
ถูกเปิดใช้งาน (เมื่อใช้งานenum BOOL)
ดังนั้นจึงสามารถสรุปได้เช่นเดียวกับคำตอบอื่น ๆ เพียงไม่กี่คำintประเภทนั้นไม่ใหญ่พอที่จะเก็บค่า "1" ไว้ในบิตบิตเดียว
intฉันคิดว่ามันสามารถเก็บค่า0และ-1.