if((A) && (B))
{
//do something
}
else
//do something else
सवाल यह है कि अगर कोई गलत था तो बयान तत्काल तोड़ देगा। क्या बी भी मूल्यांकन किया जाएगा?कैसे 'if (A && B)' कथन का मूल्यांकन किया जाता है?
मैं इस मामले में यह पूछता हूं कि बी सरणी इंडेक्स की वैधता की जांच करता है [0] जब सरणी वास्तव में खाली होती है और शून्य तत्व होते हैं। इसलिए एक segfault फेंकना क्योंकि हम सरणी की सीमा से बाहर कुछ ऐसा करने की कोशिश कर रहे हैं। विशेष रूप से
if((array.GetElements() > 0) && (array[0]))
array[0]->doSomething();
else
//do nothing and return
यह खतरनाक है, तो सरणी [0] वास्तव में मूल्यांकित किया जाता है, क्योंकि यह की '& &' बाईं ओर पहला चेक बिना segfaults हो सकता है। प्राथमिकता मुझे बताती है कि बायीं ओर निश्चित रूप से प्राथमिकता ले ली जाएगी, लेकिन यह मुझे नहीं बताती है कि बाएं गलत होने पर यह सही पक्ष का मूल्यांकन नहीं करेगा।
अन्य कैनोलिक रूप 'if (p && p-> bar) {}' है। यह भी सुरक्षित है। – MSalters
यदि आप सिर्फ "कुछ भी नहीं करना चाहते हैं और वापस लौटना चाहते हैं", तो आपको पूरी तरह से "अन्य" छोड़ना चाहिए। अन्यथा, संकलक या तो शिकायत करेगा कि किसी और के साथ जाने का कोई बयान नहीं है (अगर संलग्न ब्लॉक में आखिरी चीज है) या बदतर, अगला कथन लें और अन्य ब्लॉक में दिए गए बयान के रूप में इसका इस्तेमाल करें । –
मैंने प्लेसहोल्डर के रूप में टिप्पणियों का उपयोग करने का प्रयास किया जिसका अर्थ है: कुछ कोड यहां जायेंगे, लेकिन मेरे उदाहरण में शामिल करना महत्वपूर्ण नहीं है। स्थिति की वास्तविकता यह है कि कोड है जो किसी अन्य के दायरे में लौटाता है लेकिन दूसरे के दायरे के बाद कोड भी देता है। उम्मीद है कि इसे – BuckFilledPlatypus