विभिन्न कंटेनरों से इटरेटर्स की तुलना करना: अपरिभाषित व्यवहार को स्पष्ट करना
सी में इटरेटर्स के साथ काम करते समय, इटरेटर्स की तुलना करने की सीमाओं को समझना महत्वपूर्ण है विभिन्न कंटेनर. यह आलेख इस प्रश्न पर चर्चा करता है कि क्या अभिव्यक्ति foo.begin() == bar.begin() गलत या अपरिभाषित व्यवहार उत्पन्न करती है, जहां foo और bar दो अलग-अलग std::vector कंटेनर हैं।
के अनुसार सी 11 मानक (एन3337), विभिन्न कंटेनरों के पुनरावर्तकों की सीधे तुलना नहीं की जा सकती। धारा 24.2.5 में कहा गया है कि फॉरवर्ड इटरेटर्स के लिए समानता ऑपरेटर == का डोमेन केवल समान अंतर्निहित अनुक्रम पर इटरेटर्स के लिए परिभाषित किया गया है। चूंकि अलग-अलग कंटेनरों को अलग-अलग अनुक्रम माना जाता है, इसलिए उनसे पुनरावृत्तियों की तुलना करना अपरिभाषित व्यवहार है।
इसके अलावा, LWG अंक #446 विशेष रूप से इस प्रश्न को संबोधित करता है। प्रस्ताव का उद्देश्य मानक में स्पष्ट पाठ जोड़ना है जो यह स्पष्ट करता है कि विभिन्न श्रेणियों से पुनरावृत्तियों की तुलना करना, जब तक कि स्पष्ट रूप से अन्यथा परिभाषित न किया गया हो, अपरिभाषित है। यह इस बात पर जोर देता है कि अप्रत्यक्ष रूप से अलग-अलग श्रेणियों से पुनरावृत्तियों की तुलना करना, जैसे कि std::find जैसे कार्यों का उपयोग करना, अपरिभाषित व्यवहार का परिणाम हो सकता है।
इसलिए, विभिन्न कंटेनरों या विभिन्न कंटेनरों की उपश्रेणियों से पुनरावृत्तियों की तुलना करने से बचना आवश्यक है। ऐसा करने से अप्रत्याशित परिणाम हो सकते हैं और मजबूत कोड प्रथाओं से बचना चाहिए।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3