अब हमारे पास कई नई सुविधाओं के साथ C ++ 11 है। एक दिलचस्प और भ्रमित करने वाला (कम से कम मेरे लिए) नया हैnullptr
।
खैर, अब स्थूल मैक्रो के लिए कोई ज़रूरत नहीं है NULL
।
int* x = nullptr;
myclass* obj = nullptr;
फिर भी, मुझे नहीं मिल रहा है कि कैसे nullptr
काम करता है। उदाहरण के लिए, विकिपीडिया लेख कहता है:
C ++ 11 एक विशिष्ट नल पॉइंटर निरंतर: nullptr के रूप में सेवा करने के लिए एक नया कीवर्ड प्रस्तुत करके इसे सही करता है । यह टाइप nullptr_t का है , जो कि किसी भी पॉइंटर टाइप या पॉइंटर-टू-मेंबर टाइप के लिए समान रूप से कन्वर्टिबल और तुलनीय है। यह स्पष्ट रूप से परिवर्तनीय या अभिन्न प्रकारों के लिए तुलनीय नहीं है, बूल को छोड़कर।
यह एक कीवर्ड और एक प्रकार का उदाहरण कैसे है?
इसके अलावा, क्या आपके पास एक और उदाहरण है (विकिपीडिया के बगल में) जहां nullptr
अच्छा पुराने से बेहतर है 0
?
nullptr_t
केवल एक ही सदस्य होने की गारंटी है nullptr
? इसलिए, यदि कोई फ़ंक्शन वापस आया है nullptr_t
, तो संकलक को पहले से ही पता है कि फ़ंक्शन के निकाय की परवाह किए बिना, कौन सा मान लौटाया जाएगा?
std::nullptr_t
को तत्काल किया जा सकता है, लेकिन सभी उदाहरण समान होंगे nullptr
क्योंकि इस प्रकार को परिभाषित किया गया है typedef decltype(nullptr) nullptr_t
। मेरा मानना है कि प्राथमिक कारण इस प्रकार मौजूद है कि nullptr
यदि आवश्यक हो तो कार्यों को विशेष रूप से पकड़ने के लिए अतिभारित किया जा सकता है। एक उदाहरण के लिए यहाँ देखें ।
nullptr
C ++ / CLI में प्रबंधित हैंडल के लिए अशक्त संदर्भ को दर्शाने के लिए भी उपयोग किया जाता है।