दिलचस्प पोस्ट
बड़ी फ़ाइलों के साथ Git दो डेटा फ्रेम को पंक्तियों (आरबीआईएन) से जोड़ते हैं, जब उनके पास अलग-अलग कॉलम हैं प्रोग्रामिंग WCF app.config समापन बिंदु पता सेटिंग को कैसे संशोधित करें? स्विफ्ट चर सजावट "?" (प्रश्न चिह्न) और "!" (उद्गार चिन्ह) के साथ जावा में सरणी के लिए सूची कन्वर्ट कैसे एक सामान्य सरणी बनाने के लिए? अपरिभाषित ऑफसेट PHP त्रुटि मैं जावास्क्रिप्ट फ़ाइलों को रीफ्रेश करने के लिए ग्राहकों को कैसे मजबूर कर सकता हूं? jQuery – आग घटना अगर सीएसएस वर्ग बदल गया है मैं सी # के साथ वेब कैमरा वीडियो कैसे स्ट्रीम कर सकता हूं? जावा का उपयोग करते हुए समान नेटवर्क (सबनेट) से जुड़े आईपी की सूची कैसे प्राप्त करें I एंड्रॉइड स्टूडियो में जेक्सएक्सिंग को एकीकृत करें आप दो एक्सएमएल दस्तावेजों की तुलना किस प्रकार करेंगे? ऊपर की ओर स्लाइड करने के लिए एक छवि दृश्य एनिमेट करना उपप्रक्रिया का उपयोग करके अजगर स्क्रिप्ट में इनपुट के साथ अजगर स्क्रिप्ट को कॉल करें

सी ++ फ़ंक्शन मापदंडों में मूल्यांकन का आदेश

अगर हमारे पास तीन फ़ंक्शंस (एफयू, बार, और बाज़) हैं जो इस तरह से बनाये जाते हैं …

foo(bar(), baz()) 

क्या सी ++ मानक से कोई गारंटी है कि बार को बज़ से पहले मूल्यांकन किया जाएगा?

वेब के समाधान से एकत्रित समाधान "सी ++ फ़ंक्शन मापदंडों में मूल्यांकन का आदेश"

नहीं, ऐसी कोई गारंटी नहीं है यह C ++ मानक के अनुसार अनिर्धारित है

बर्जने स्ट्रावट्रुप भी कुछ तर्कों के साथ "सी ++ प्रोग्रामिंग भाषा" का तीसरा संस्करण खंड 6.2.2 में स्पष्ट रूप से कहता है:

अभिव्यक्ति मूल्यांकन आदेश पर प्रतिबंधों के अभाव में बेहतर कोड उत्पन्न किया जा सकता है

हालांकि तकनीकी रूप से यह एक ही खंड के पहले भाग को संदर्भित करता है, जो कहता है कि अभिव्यक्ति के कुछ हिस्सों के मूल्यांकन के आदेश भी अनिर्धारित हैं, यानी

 int x = f(2) + g(3); // udefined whether f() or g() is called first 

बार () और बज़ () के लिए कोई विशिष्ट आदेश नहीं है – केवल एक ही बात मानक कहते हैं कि यह दोनों का मूल्यांकन किया जायेगा foo () से पहले। सी ++ मानक से, खंड 5.2.2 / 8:

तर्कों के मूल्यांकन के क्रम अनिर्दिष्ट हैं।

[5.2.2] फ़ंक्शन कॉल से,

तर्कों के मूल्यांकन के क्रम अनिर्दिष्ट हैं। फ़ंक्शन दर्ज होने से पहले तर्क अभिव्यक्ति मूल्यांकन के सभी दुष्प्रभाव प्रभावी होते हैं।

इसलिए, कोई गारंटी नहीं है कि bar() baz() से पहले चलेंगे, केवल उस bar() और baz() को foo से पहले बुलाया जाएगा।

इसके अलावा [5] अभिव्यक्तियों से ध्यान दें कि:

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

तो भी अगर आप पूछ रहे थे कि bar() foo(bar() + baz()) में baz() से पहले चलेंगे, तो आदेश अभी भी अनिर्दिष्ट है।