यह निर्भर करता है।
यदि &&
सामान्य शॉर्ट-सर्किटिंग लॉजिकल ऑपरेटर है, तो यह ठीक है क्योंकि अनुक्रम बिंदु है। array[x]
नए मान का उपयोग करेगा।
तो &&
उपयोगकर्ता (या पुस्तकालय) में परिभाषित किया अतिभारित ऑपरेटर है, तो कोई शॉर्ट सर्किट, और यह भी x--
के मूल्यांकन और array[x]
के मूल्यांकन के बीच एक दृश्य बिंदु की कोई गारंटी नहीं है। यह आपके कोड को असंभव रूप से नहीं दिखता है, लेकिन संदर्भ के बिना निश्चित रूप से कहना संभव नहीं है। मुझे लगता है कि array
की सावधानीपूर्वक परिभाषा के साथ, इसे व्यवस्थित करना संभव है।
यही कारण है कि operator&&
अधिभारित करना लगभग हमेशा एक बुरा विचार है।
वैसे, if ((x > 0) && array[--x])
का एक बहुत ही समान प्रभाव है (फिर से, कोई ऑपरेटर अधिभार शेंगेनिंग नहीं करता है), और मेरी राय में स्पष्ट है। अंतर यह है कि x
पिछले 0 में कमी आई है, जिसे आप भरोसा कर सकते हैं या नहीं।
स्रोत
2010-10-28 15:43:41
दूसरों को पढ़ने के लिए अपने कोड को साफ रखना याद रखें, भले ही अच्छी तरह से परिभाषित किया गया हो, अगर कोई बाद में अभिव्यक्ति को बदलता या जोड़ता है तो यह कोई समस्या उत्पन्न कर सकता है। बस मेरे 2 सी –
भले ही इसे अच्छी तरह से परिभाषित किया जा सके, आपको इस तरह के कोड का उपयोग नहीं करना चाहिए। जैसा कि आप इसे लिखते हैं, आप इसे समझ सकते हैं, लेकिन अगला पेसन नहीं हो सकता है। – codymanix
यह कोड सभी के बाद बहुत बुरा नहीं है। मैंने लिनक्स कर्नेल में खराब कोड देखा है: डी – knittl