दिलचस्प पोस्ट
जावा ने आंतरिक वर्गों में स्थैतिक क्षेत्रों पर प्रतिबंध लगाया है? परिवर्तित और amp; उद्देश्य-सी में एक स्ट्रिंग में वर्णों की एक सूची में कनवर्ट करें लॉगकैट की आकार सीमा और इसकी क्षमता कैसे बदलनी है? मैं एक वर्ग की परीक्षा कैसे कर सकता हूं जिसमें निजी विधियों, फ़ील्ड या आंतरिक वर्ग हैं? जावा.टिल.डेट का समय क्षेत्र कैसे सेट करें? पायथन: अधिकतम पुनरावर्ती गहराई से अधिक हो गई संसाधित प्रोसीस बनाम कोड में एसक्यूएल को रखने के पेशेवर और विपक्ष क्या हैं क्लाइंट आईपी पता jQuery का उपयोग कैसे करें जांचें कि कोई स्ट्रिंग html है या नहीं सी + + आभासी टेम्पलेट विधि getActionBar () रिक्त रिटर्न आइकलिंग <टी> वीएस लिस्ट <टी> इनटाइटी फ्रेमवर्क में ओरेकल के जेडीबीसी ड्राइवर वर्गों में अंतर? Symfony2 एक डिफ़ॉल्ट विकल्प फ़ील्ड चयन सेट करना

ऑपरेंडों के मूल्यांकन के क्रम

अभिव्यक्ति में a + b , a + b पहले मूल्यांकन किए जाने की गारंटी है, या क्या अनिर्धारित मूल्यांकन का क्रम है? मुझे लगता है कि यह उत्तरार्द्ध है, लेकिन मैं मानक में एक निश्चित जवाब खोजने के लिए संघर्ष करता हूं।

चूंकि मुझे नहीं पता कि सी इस सी से अलग है या सी ++ 11 में मूल्यांकन के नियमों को सरल बनाने के लिए, मैं प्रश्न को तीनों के रूप में टैग करने वाला हूँ।

वेब के समाधान से एकत्रित समाधान "ऑपरेंडों के मूल्यांकन के क्रम"

सी ++ में, उपयोगकर्ता परिभाषित प्रकारों के लिए a + b फ़ंक्शन कॉल है, और मानक कहते हैं:

§5.2.2.8 – […] फ़ंक्शन तर्कों के मूल्यांकन के क्रम अनिर्दिष्ट हैं । […]

सामान्य ऑपरेटरों के लिए, मानक कहते हैं:

§5.4 – जहां बताई गई है, अलग-अलग ऑपरेटरों के ऑपरेंडों और व्यक्तिगत अभिव्यक्तियों के उप-प्रत्याशियों के मूल्यांकन के क्रम, और दुष्प्रभावों के क्रम में होने वाले आदेश को अनिर्दिष्ट किया गया है । […]

ये सी ++ 11 के लिए नहीं बदले गए हैं हालांकि, दूसरे शब्दों में शब्दों के परिवर्तन में यह कहना है कि आदेश " अनिर्धारित " के बजाय अनिर्दिष्ट है, लेकिन यह अनिवार्य रूप से एक ही है।

मेरे पास सी मानक की एक प्रति नहीं है, लेकिन मैं सोचता हूं कि यह वहीं है जितनी अच्छी तरह से।

यह अनिर्दिष्ट है

संदर्भ – सी ++ 03 मानक:

धारा 5: अभिव्यक्ति, पैरा 4:

को छोड़कर जहां उल्लेख किया गया है [उदाहरण के लिए & amp; & amp;; और] के लिए विशेष नियम, व्यक्तिगत ऑपरेटरों के ऑपरेटरों के मूल्यांकन के आदेश और व्यक्तिगत अभिव्यक्तियों के उप-प्रत्यारोप और जिस क्रम में दुष्प्रभाव होते हैं, वह अनिर्दिष्ट है

सी ++ 0x एफडीआईएस सेक्शन 1.9 "प्रोग्राम निष्पादन" §15 सी ++ 03 में संबंधित पैराग्राफ के समान है, "अनुक्रम अंक" से "अनुक्रमित" होने के लिए वैचारिक परिवर्तन को समायोजित करने के लिए बस पुन: कोड किया गया है:

जहां बताई गई है, व्यक्तिगत अभिव्यक्तियों के उप-प्रत्याशियों के ऑपरेटरों के मूल्यांकन और व्यक्तिगत अभिव्यक्तियों के उपेक्षा के बावजूद अभियोग हैं।

यह अनिर्दिष्ट है सी और सी ++ अनुक्रम अंक चुनने में समान तर्क का पालन करें:

https://en.wikipedia.org/wiki/Sequence_point

सी के लिए: "ऑर्डर ऑफ ऑपरेशन्स को भाषा से परिभाषित नहीं किया गया है। कंपाइलर किसी भी क्रम में इस तरह के भावों का मूल्यांकन करने के लिए स्वतंत्र है, अगर संकलक लगातार परिणाम की गारंटी दे सकता है।" […] "केवल अनुक्रमिक-मूल्यांकन (,), तार्किक- AND (&&), तार्किक- OR (||), सशर्त-अभिव्यक्ति (?), और फ़ंक्शन-कॉल ऑपरेटर अनुक्रम बिंदु बनाते हैं और इसलिए उनके ऑपरेंड के लिए मूल्यांकन का विशेष क्रम। "

स्रोत: http://msdn.microsoft.com/en-us/library/2bxt6kc4.aspx

जिस तरह से इस लेख में व्यवस्थित किया गया है, ऐसा लगता है कि यह सी ++ पर भी लागू होता है, जो इस प्रश्न के उत्तर से पुष्टि की जाती है: ऑपरेटर प्रीडेंसेंस बनाम ऑर्डर ऑफ ऑल्यूएशन ।

वर्तमान सी मानक के मुताबिक, सी 11, यह भी निर्दिष्ट करता है कि उप-एक्सप्रेशन (इस मामले में a और b ) के मूल्यांकन का क्रम अनिश्चित है। वास्तव में, यह आदेश भी ऐसा नहीं होना चाहिए, यदि एक ही अभिव्यक्ति का मूल्यांकन कई बार हो।

खंड 6.5 से:

ऑपरेटरों और ऑपरेटरों का समूह सिंटैक्स द्वारा इंगित किया गया है। 85) बाद में निर्दिष्ट के अलावा, उप- प्रभावों के साइड इफेक्ट्स और वैल्यू कंप्यूटेशंस का असर नहीं है। 86)


86) एक ऐसे कार्यक्रम में जो एक कार्यक्रम के निष्पादन के दौरान एक से अधिक बार मूल्यांकन किया जाता है, इसके उप-प्रैक्टिस के अनंतिम और अनिश्चित रूप से अनुक्रमित मूल्यांकनों को अलग-अलग मूल्यांकन में लगातार पूरा नहीं किया जाना चाहिए।