c++ - इसका क्या मतलब है "एक फ़ंक्शन कॉल के कारण Predicates को अपने राज्य को संशोधित नहीं करना चाहिए"?




c++11 stl (3)

अनिवार्य रूप से क्या मानक कहता है कि विधेय को एक शुद्ध कार्य (गणितीय शब्दों में) की तरह कार्य करना चाहिए, अर्थात इसका वापसी मूल्य अकेले इनपुट पर निर्भर होना चाहिए।

राज्य का उल्लेख क्योंकि विधेय की प्रतिलिपि बनाई जा सकती है या उन्हें अलग-अलग थ्रेड में लागू किया जा सकता है, जो कार्यान्वयन और प्लेटफ़ॉर्म व्यवहार पर निर्भर करता है। लैम्ब्डा और अन्य अदृश्य वस्तुओं के लिए, जो कार्य नहीं कर रहे हैं, इसका मतलब हो सकता है कि भंडारण के लिए अनियंत्रित पहुंच, संदर्भ द्वारा कब्जा कर लिया गया हो, या यदि वे मूल्य द्वारा कब्जा कर लिया गया हो तो विभिन्न मूल्यों तक पहुंचें। एक फ़ंक्शन के लिए, इसका मतलब है कि किसी भी पक्ष-प्रभाव (स्थैतिक चर के परिवर्तन सहित) के परिणामस्वरूप समस्याएं हो सकती हैं।

यदि छँटाई के लिए एक विधेय एक ही जोड़ी के लिए अलग-अलग परिणाम देगा, तो कुछ प्रकार के एल्गोरिदम अमान्य हो जाते हैं।

मैं C ++ के बारे में ऑनलाइन पढ़ रहा था और इस कथन पर आया:

एक फ़ंक्शन कॉल के कारण विधेयकों को अपने राज्य को संशोधित नहीं करना चाहिए।

मुझे समझ नहीं आया कि "राज्य" का यहाँ क्या मतलब है। क्या कोई उदाहरण के साथ विस्तार से बता सकता है?


अन्य उत्तरों के अलावा, कई एल्गोरिदम जो विधेय लेते हैं, वे किसी विशेष ट्रैवर्सल ऑर्डर का वादा नहीं करते हैं ( एक्ज़ेक्यूशनपॉलिशियल ओवरलोड, इंटरलेस्ड ट्रैवर्सल के लिए अनुमति देते हैं)। आपको एक ही प्रश्न के अलग-अलग उत्तर मिल सकते हैं।

यदि 1 थ्रेड को कॉल करने वाले कई थ्रेड हैं और यह कुछ साझा मूल्य को बदलता है, तो यह डेटा रेस यानी अपरिभाषित व्यवहार है।

  1. या एक धागा interleaving करने के लिए कहता है

आम शब्दों में, एक राज्य एक विधेय में एक डेटा सदस्य है। राज्य को बदलने के लिए एक विधेय का अर्थ है कि एल्गोरिथ्म निष्पादन के दौरान सदस्य को बदल जाना और यह परिवर्तन विधेय व्यवहार को प्रभावित करने वाला है।

इससे बचने का कारण यह है कि एल्गोरिदम एक विधेय का एक भी उदाहरण रखने के लिए बाध्य नहीं है। उन्हें आसानी से चारों ओर कॉपी किया जा सकता है, और राज्य एक प्रति में बदल दिया जाता है, किसी अन्य प्रतिलिपि में एक राज्य के साथ साझा नहीं किया जाएगा। नतीजतन, कार्यक्रम अप्रत्याशित रूप से व्यवहार करेगा (राज्य परिवर्तन की उम्मीद करने वाले किसी व्यक्ति के लिए)।





predicate