2011-01-07 12 views
22

मैंने कक्षा में एक बूलियन चर bool abc; घोषित किया था और सोचा था कि यह डिफ़ॉल्ट रूप से गलत होगा। अगर मेरे प्रोग्राम if (abc) में एक शर्त सही साबित हुई, तो मैंने एबीसी के मूल्य को आउटपुट किया, और देखा कि इसमें मूल्य 55 है। क्या यह सामान्य है? क्या हमें यह सुनिश्चित करने के लिए हमेशा 'बूल एबीसी = झूठा' असाइन करना होगा कि यह झूठा है?बुलीयन चर डिफ़ॉल्ट रूप से हमेशा गलत नहीं होते हैं?

+0

क्यों: http://stackoverflow.com/questions/1910832/c-why-arent-pointers-initialized-with-null-by-default/1910992#1910992 –

+0

[ध्यान दें कि एक अनियमित चर पढ़ने से यूबी की ओर जाता है ।] (http://stackoverflow.com/questions/4259885/why-do-i-see-strange-values-when-i-print-uninitialized-variables/4259991#4259991) बस इसे मत करें। – GManNickG

+1

इस स्थिति में दिखाया जा सकता है कि एक 'रोचक' बग बी और बी दोनों सही –

उत्तर

19

हां, आपको हमेशा अपने चर शुरू करना चाहिए। जब तक आप गहराई से समय नहीं सीखते हैं और स्पष्ट रूप से ऐसा करने के लिए आवश्यक नहीं है, आपको यह हर समय करना चाहिए, इससे कोई फर्क नहीं पड़ता। और तब तक ... अच्छा ... एक अच्छी आदत क्यों रोकें?

गलत पर एक bool प्रारंभ करने के लिए यह डिफ़ॉल्ट करने के लिए पर्याप्त है, यह निर्माण:

struct X 
{ 
    bool b; 
    X() : b() {} 
}; 
+8

पर मूल्यांकन कर रहा है, मैं स्पष्ट बुलियन शाब्दिक झूठा जोड़ना चाहता हूं (मेरे लिए जो इसे और अधिक पठनीय बनाता है (हालांकि तकनीकी रूप से आपके से अलग नहीं है)। –

21

के बारे में आदिम निर्मित डेटा प्रकार (bool, चार, wchar_t, लघु, पूर्णांक, लंबे, नाव में बात करते हुए डबल , लंबे समय तक डबल), सी ++ मानक के अनुसार, केवल वैश्विक चर को शून्य का डिफ़ॉल्ट मान मिलता है यदि उन्हें स्पष्ट रूप से प्रारंभ नहीं किया गया है।

स्थानीय चर के लिए शिकायतकर्ता के लिए आवश्यक स्मृति की सामग्री को साफ करने की आवश्यकता नहीं है। एक स्थानीय चर - अगर स्पष्ट रूप से प्रारंभ नहीं किया गया है - इसमें मनमाना मूल्य होगा।

+5

तकनीकी रूप से यह 'स्थिर भंडारण अवधि' ग्लोबल्स के चर हैं इस प्रकार के चर के सदस्य हैं। –

1

हां। आपको या तो bool x=false या bool x(false) करना होगा। जिन प्राइमेटिव्स को प्रारंभ नहीं किया गया है उनमें कोई भी मूल्य हो सकता है।

wikipedia

+1

या 'बूल एक्स = बूल();' साथ ही साथ काम करेगा। –

1

देख हां। ALWAYS उपयोग से पहले अपने चर शुरू करें। भले ही भाषा गारंटी देता है कि उनके पास विशिष्ट मूल्य होंगे। यदि आप स्वयं को मजबूर नहीं कर सकते हैं, तो एक कंपाइलर प्राप्त करें जो शिकायत करेगा, और फिर स्वयं को ऐसा कर देगा। :)

हालांकि, मानों को प्रारंभ न करें जब तक कि उनके पास वास्तव में प्रारंभ होने का अर्थ न हो। उदाहरण के लिए, अगर आप इस तरह एक पाश है (मैं यह नहीं कह रहा हूँ यह अच्छा कोड है, यह सिर्फ एक उदाहरण है): जैसे मैंने किया था

int i = 0; 
while ((i = getNum()) == 5) 
{ 
} 

शून्य करने के लिए i प्रारंभ न करें। यह कोई समझ नहीं आता है, और जब यह कंपाइलर को बंद कर देता है, तो यह संभावना है कि आप इसे भूल जाएंगे और फिर आपका कोड गड़बड़ हो जाएगा। यदि आप केवल सही समय पर ही आरंभ करने के लिए मजबूर कर सकते हैं - और नहीं, कम नहीं - तो आप wrong code will look wrong even at just a glance के बाद से बहुत आसान की एक बिल्ली को डिबग कर देंगे।

तो, एक पंक्ति में: संकलक से शिकायत करने से रोकने के लिए कभी प्रारंभ नहीं करें, लेकिन हमेशा उपयोग से पहले प्रारंभ करें।

4

केवल वैश्विक चर को डिफ़ॉल्ट रूप से 0 (झूठा) असाइन किया जाता है, किसी भी स्थानीय चर को गैर-शून्य कचरा मान दिया जाता है, जो एक बूलियन चर में सत्य का मूल्यांकन करेगा।

संबंधित मुद्दे

 संबंधित मुद्दे