"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > C++ में मानचित्र तत्व को असाइन करने का परिणाम अप्रत्याशित आकार में क्यों होता है?

C++ में मानचित्र तत्व को असाइन करने का परिणाम अप्रत्याशित आकार में क्यों होता है?

2024-11-04 को प्रकाशित
ब्राउज़ करें:640

 Why Does Assigning to a Map Element in C   Result in an Unexpected Size?

सी में असाइनमेंट स्टेटमेंट का मूल्यांकन क्रम

मानचित्र को मान निर्दिष्ट करते समय एक पेचीदा आउटपुट प्राप्त किया जा सकता है:

map mp;
printf("%d ", mp.size());
mp[10] = mp.size();
printf("%d\n", mp[10]);

यह कोड प्रिंट करता है:

0 1

यह परिणाम उल्टा लग सकता है, जैसा कि कोई उम्मीद कर सकता है असाइनमेंट के बाद मानचित्र का आकार 1 होना चाहिए। हालाँकि, असाइनमेंट स्टेटमेंट का मूल्यांकन क्रम यहां एक महत्वपूर्ण भूमिका निभाता है।

असाइनमेंट एमपी के बाईं ओर[10] मानचित्र तत्व के अंतर्निहित मूल्य का एक संदर्भ देता है। साथ ही, यह क्रिया mp[10] तत्व के लिए एक नया मान बनाती है। इस ऑपरेशन के बाद ही मानचित्र के नए परिकलित आकार का उपयोग करके दाईं ओर का मूल्यांकन किया जाता है।

यह व्यवहार सी मानक में स्पष्ट रूप से नहीं बताया गया है, लेकिन अनिर्दिष्ट व्यवहार के अंतर्गत आता है। एक हालिया प्रस्ताव, एन4228, का लक्ष्य ऐसे मामलों को निर्दिष्ट करने के लिए मूल्यांकन नियमों के क्रम को परिष्कृत करना है।

ड्राफ्ट सी 11 मानक (1.9) के प्रासंगिक खंड में कहा गया है कि व्यक्तिगत अभिव्यक्तियों के उप-अभिव्यक्तियों का मूल्यांकन आम तौर पर अव्यवस्थित होता है। हालाँकि, फ़ंक्शन कॉल (जैसे ऑपरेटर [] और आकार()) को कॉल किए गए फ़ंक्शन के बॉडी के निष्पादन से पहले अनुक्रमित किया जाता है।

इसलिए, असाइनमेंट एक्सप्रेशन का दायां ऑपरेंड बाएं ऑपरेंड के बाद अनुक्रमित होता है, जिसके परिणामस्वरूप देखा गया व्यवहार. इसका मतलब है कि मूल्यांकन का क्रम इस प्रकार है:

  1. दाएं ऑपरेंड का मूल्यांकन करें: mp.size()
  2. बाएं ऑपरेंड के लिए मान बनाएं: mp[10]
  3. दाएं ऑपरेंड का मान बाएं ऑपरेंड को निर्दिष्ट करें

सी मानक में एक अद्यतन से इस व्यवहार को निर्दिष्ट करने की अपेक्षा की जाती है, जिससे यह स्पष्ट हो जाता है कि असाइनमेंट अभिव्यक्ति का दायां ऑपरेंड अनुक्रमित है बाएं ऑपरेंड से पहले.

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3