यह एक आम पैटर्न है जिसे मैं इंडेक्स टोकन के रूप में उपयोग करने के लिए उपयोग करता हूं: जांच करें कि टोकन मानचित्र में है या नहीं, और यदि नहीं, तो मानचित्र के आकार को निर्दिष्ट करने के लिए इसे मानचित्र में जोड़ें।किसी आकार के मानचित्र को उसके आकार में सेट करने से आकार * पहले * इसे आवंटित क्यों करता है?
जब सी ++ में यह कर, यह अप्रत्याशित रूप से नक्शे के आकार से पहले काम किया जाता है वृद्धि कर देता है:
#include <cstdio>
#include <map>
using namespace std;
int main() {
map<char, int> m;
printf("Size before adding: %d\n", m.size());
m['A'] = m.size();
printf("Size after adding: %d\n", m.size());
printf("What was added: %d\n", m['A']);
return 0;
}
यह बाहर प्रिंट:
Size before adding: 0
Size after adding: 1
What was added: 1
तरह से मैं यह समझते हैं, यह होना चाहिए दाईं ओर का मूल्यांकन करें, जो शून्य है, फिर उसे उस फ़ंक्शन पर पास करें जो 'ए' और शून्य को मानचित्र में रखता है। लेकिन ऐसा लगता है कि इसे असाइन करना शुरू करने के बाद इसका मूल्यांकन किया जा रहा है, जो समझ में नहीं आता है।
असाइनमेंट ऑपरेशन से पहले दाएं हाथ की तरफ मूल्यांकन नहीं किया जाना चाहिए?
नहीं, मुझे यकीन है कि यह यूबी है। – Borgleader
@ बॉर्गलीडर: यह अनिर्दिष्ट व्यवहार है। – Nawaz
@ नवाज ओह सही, निर्दिष्ट – Borgleader