2012-12-20 9 views
10

क्या निम्नलिखित कोड स्वीकार्य है?क्या मैं सी ++ में वेक्टर सीमाओं की जांच के लिए शॉर्ट-सर्किट मूल्यांकन पर भरोसा कर सकता हूं?

if(vector.size() > 0 && vector[0] == 3) { 
} 

या क्या कोई मौका है कि जब वेक्टर खाली हो जाए तो यह दुर्घटनाग्रस्त हो जाएगा? मैंने यह नहीं देखा है, लेकिन मुझे चिंता है कि यह अभी भी संभव है।

+7

यह ठीक है। जैसा कि आपने कहा था, शॉर्ट-सर्किट मूल्यांकन खेल में आता है। आप वैकल्पिक रूप से पहले भाग के लिए '! Vector.empty()' का उपयोग कर सकते हैं। – chris

+1

हां। लघु-सर्किटिंग मानक द्वारा सटीक रूप से परिभाषित किया जाता है। –

+0

संभावित डुप्लिकेट [क्या शॉर्ट सर्किट मूल्यांकन सी ++ में जावा के रूप में गारंटीकृत है?] (Http://stackoverflow.com/questions/2108467/is-short-circuit-evaluation-in-c-as-it- इन-इन-जावा) – DazzaL

उत्तर

11

हाँ, यह काम करता है, लेकिन !vector.empty() && vector[0] == 3 कहने के लिए यह अधिक मूर्खतापूर्ण होगा: यह अधिकतम कंटेनर के साथ अधिकतम कंटेनर के लिए काम करेगा, इसलिए यह कभी भी खराब नहीं होता है, कभी-कभी बेहतर और हमेशा अधिक पठनीय होता है।

14

हां, आप शॉर्ट-सर्किट में बिल्टिन ऑपरेटर && पर भरोसा कर सकते हैं। यह इसके विनिर्देश का हिस्सा है।

+0

उपरोक्त। Sidenote: 'ऑपरेटर &&' के साथ यह "दो-चरण" उस भाषा की विशेषताओं में से एक है जिसे मैं सबसे ज्यादा नापसंद करता हूं। स्पष्ट रूप से, समिति को * कभी भी * ओवरलोडिंग की अनुमति नहीं दी जानी चाहिए अगर वे * गारंटी * नहीं दे सकते थे कि वही अर्थशास्त्र लागू होता है कि अंतर्निर्मित या अधिभारित ऑपरेटर लागू किया जा रहा है या नहीं। –

+0

निक Bougalis कुछ भी पसंद है अगर यह संदिग्ध है यह मत करो। यह वही है यदि मैं ऑपरेटर ++ को कम करने के लिए ओवरलोड करता हूं। – Beached

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