অনুযায়ী 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
:
সতর্কতা: 'মাইস্ট্রাকট :: :: সক্ষম' এনাম বিওএল-এর সমস্ত মান ধরে রাখতে খুব ছোট
struct mystruct { BOOL enabled:1; };
আউটপুটটি হ'ল:
নিষ্ক্রিয় করা !! (ব্যবহার করার সময় enum BOOL : int
)
যদি enum BOOL : int
সাধারণ করা হয় enum BOOL
, তবে উপরের স্ট্যান্ডার্ড প্যাসেজটি নির্দিষ্ট করে যেমন আউটপুট হয়:
সক্ষম করা হয়েছে (ব্যবহার করার সময় enum BOOL
)
অতএব, এটি উপসংহারে পৌঁছানো যায়, অন্য কয়েকটি উত্তর যেমন রয়েছে, কেবলমাত্র একক বিট-ফিল্ডে মান "1" সংরক্ষণ করার জন্য এই int
ধরণের পরিমাণটি বড় নয়।
int
আমি মনে করি এটি কেবল মানগুলি ধরে রাখতে পারে0
এবং-1
।