मैं nullptr
का संकलक समर्थन के लिए इंतज़ार कर थक मिला अनुकरण (gcc 4.6 does लेकिन यह इतना नया कुछ वितरण इसे समर्थन है)।पूरी तरह से nullptr
तो जैसा कि nullptr
जब तक एक को रोकने के अंतर को पूरी तरह से समर्थित है मैं इसे का अनुकरण करने का फैसला किया। इम्यूलेशन के दो उदाहरण हैं: here से, और wikibooks में से एक।
, न तो कार्यान्वयन एक operator ==
का उल्लेख है। हालांकि, एक के बिना, निम्नलिखित कोड will not compile।
int* ptr = nullptr;
assert(ptr == nullptr); // error here: missing operator ==
इस operator ==
त्रुटि एक संकलक बग है?
operator ==
(और !=
, <
, <=
, आदि) को nullptr
का अधिक अनुकरण करने की आवश्यकता है?
नकली nullptr
और असली सौदा के बीच और क्या अंतर है?
आप 'assert (ptr) के बजाय ऐसा क्यों करेंगे;' पहले स्थान पर? – ildjarn
@ नील बटरवर्थ: यह सच नहीं है। 'nullptr' को मानक का हिस्सा होना चाहिए क्योंकि इसमें केवल तभी मूल्य होता है जब सभी एक ही शून्य सूचक प्रकार-' std :: nullptr_t' का उपयोग करते हैं। अगर हर कोई अपना खुद का शून्य सूचक लागू करता है, तो आप एक ऐसा फ़ंक्शन कैसे लिखेंगे जो शून्य सूचक को स्वीकार करेगा? आप नहीं जानते कि शून्य सूचक प्रकार क्या है। – Puppy
@ildjarn: मैंने कोड को साफ करने के लिए एक दावा किया था। मेरा वास्तविक उदाहरण 'std :: remove (v.begin(), v.end(), nullptr था; 'जो समानता ऑपरेटर का उपयोग करता है। और कारण मैं सिर्फ 'std :: remove_if' का उपयोग नहीं करता हूं, मैं नहीं चाहता हूं। मैं चाहता हूं कि यह सिर्फ वास्तविक 'nullptr' की तरह काम करे। –