c++ - Function arguments referring to the same variable -
कॉलिंग f (a, a)
निम्न कोड में अपरिभाषित व्यवहार है?
#include & lt; iostream & gt; Int f (int और m, int & n) {m ++; n ++; वापसी एम + एन; } Int main () {int a = 1; Int b = f (a, a); }
m
संशोधित करने के संबंध में कोई नहीं है और n
चूंकि दोनों चर के संशोधनों का क्रम है। m
का संशोधन n
के संशोधन से पहले होगा क्योंकि वे पूर्ण अभिव्यक्ति और पूर्ण अभिव्यक्ति के सभी दुष्प्रभावों की अगली पूर्ण अभिव्यक्ति के साइड इफेक्ट से पहले अनुक्रमित होते हैं ।
इस अनुभाग का संबंधित अनुभाग 1.9
प्रोग्राम निष्पादन जो कहता है:
प्रत्येक मूल्य गणना और पक्ष पूर्ण-अभिव्यक्ति से जुड़े प्रभाव को प्रत्येक मूल्य गणना और साइड इफेक्ट से पहले अनुक्रमित किया जाता है जिसका मूल्यांकन अगले पूर्ण-अभिव्यक्ति के साथ किया जाता है .8।
और:
< P> यदि एक स्केलर ऑब्जेक्ट पर एक साइड इफेक्ट एक ही स्केलेर ऑब्जेक्ट पर या तो दूसरी स्केलर ऑब्जेक्ट पर एक साइड इफेक्ट के सापेक्ष या एक ही स्केलर ऑब्जेक्ट के मान का उपयोग करके एक वैल्यू कंपेशन के सापेक्ष न हो, तो व्यवहार अनिर्धारित है
दूसरे हाथ पर निम्न:
m ++ + n ++;
अपरिभाषित व्यवहार है क्योंकि प्रत्येक उप अभिव्यक्ति के मूल्यांकन के क्रम अनिश्चित रूप से एक दूसरे के संबंध में अनुक्रम हैं।
जोनाथन का मुद्दा उठाया है, लेकिन मैं ' टी देखें कि कंपाइलर यह कैसे मान सकता है कि n
और m
एक दूसरे को अलियासिंग नहीं कर रहे हैं और मेरे प्रयोगों में कोई अप्रत्याशित अलियासिंग मान्यताओं का संकेत नहीं है।
नोट , एक पूर्ण अभिव्यक्ति है:
[...] एक अभिव्यक्ति जो किसी अन्य अभिव्यक्ति का एक subexpression नहीं है [...]
आमतौर पर ;
एक पूर्ण अभिव्यक्ति के अंत को दर्शाता है।
Comments
Post a Comment