2009-08-30 14 views
7

आप एक सी समारोह जो एक पूर्णांक देता है, तो आप इस तरह के एक बयान लिख सकते हैं:क्या = = और | = के लिए एक निर्धारित मूल्यांकन आदेश है?

MyInt &= MyFunc(); 

... जहाँ हम बिटवाइज़-और असाइनमेंट ऑपरेटर का उपयोग कर रहे हैं।

सवाल यह है: MyFunc() को निष्पादित करने की गारंटी है, भले ही MyInt शून्य के बराबर हो?

Likwise, अगर हम bitwise-OR असाइनमेंट ऑपरेटर (| =) का उपयोग करते हैं, तो MyFunc() हमेशा निष्पादित किया जाएगा, भले ही MyInt सभी को सेट किया गया हो?

एक और तरीका रखें: बिटवाई ऑपरेटरों के लिए सी में आलसी मूल्यांकन की अनुमति है?

उत्तर

1
MyInt &= MyFunc(); 

बराबर है। हालांकि, एक ऑप्टिमाइज़र कोड उत्पन्न कर सकता है अगर फ़ंक्शन पर कॉल न करें, तो MyInt शून्य था और यह सुनिश्चित था कि फ़ंक्शन का कोई दुष्प्रभाव नहीं था। मुझे संदेह है कि किसी भी कंपाइलर्स अकसर ऐसा करते हैं, क्योंकि रनटाइम टेस्ट शायद इसे निराशाजनक बनाता है।

+1

सिवाय इसके कि 'MyInt' का मूल्यांकन ** ** एक बार ** हो सकता है (जब यह साइड इफेक्ट्स के साथ अभिव्यक्ति हो।) –

+0

असाइनमेंट के एलएचएस पर बात का मूल्यांकन नहीं किया जाएगा। –

+0

नील: 'myMap ["test"] | = 10;' जहां 'myMap.operator [] 'कुछ प्रिंट करता है। यह दूसरे रूप में दो बार मुद्रित होगा लेकिन एक बार यौगिक असाइनमेंट फॉर्म में। –

8

नहीं। बिटवाई ऑपरेटरों को संक्षिप्त सर्किट नहीं किया जाता है। MyFunc()MyInt के मूल्य के बावजूद निष्पादन की गारंटी है।

MyInt = MyInt & MyFunc(); 

भाषा कहा गया है कि & ऑपरेटर शॉर्ट सर्किट नहीं है: करने के लिए

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