Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में nullptr वास्तव में क्या है?


इस अनुभाग में हम C++ में nullptr देखेंगे। nullptr पॉइंटर लिटरल को दर्शाता है। यह std::nullptr_t प्रकार का एक prvalue है। इसमें nullptr से किसी भी पॉइंटर प्रकार के शून्य पॉइंटर मान और किसी भी पॉइंटर-टू-मेंबर प्रकार में निहित रूपांतरण गुण है। आइए इस अवधारणा को समझने के लिए एक प्रोग्राम देखें।

उदाहरण

#include<iostream> 
using namespace std; 

int my_func(int N){ //पूर्णांक प्रकार के पैरामीटर वाला फ़ंक्शन 
    cout << "Calling function my_func(int)"; 
} 

int my_func(char* str) { //char* प्रकार के पैरामीटर वाला ओवरलोडेड फ़ंक्शन 
    cout << "calling function my_func(char *)"; 
} 

int main() { 
    my_func(NULL); //यह my_func(char *) को कॉल करेगा, लेकिन कंपाइलर त्रुटि उत्पन्न करेगा 
}

आउटपुट

[Error] call of overloaded 'my_func(NULL)' is ambiguous 
[Note] candidates are: 
[Note] int my_func(int) 
[Note] int my_func(char*)

उपरोक्त प्रोग्राम में समस्या क्या है? NULL को आमतौर पर (void*)0 के रूप में परिभाषित किया जाता है। हमें NULL को पूर्णांक प्रकार में बदलने की अनुमति है। इसलिए my_func(NULL) का फ़ंक्शन कॉल अस्पष्ट है।

यदि हम NULL के स्थान पर nullptr का उपयोग करते हैं, तो हमें नीचे जैसा परिणाम मिलेगा:

उदाहरण

#include<iostream> 
using namespace std; 

int my_func(int N){ 
    cout << "Calling function my_func(int)"; 
} 

int my_func(char* str) { 
    cout << "calling function my_func(char *)"; 
} 

int main() { 
    my_func(nullptr); 
}

आउटपुट

calling function my_func(char *)

हम उन सभी स्थानों पर nullptr का उपयोग कर सकते हैं जहां NULL अपेक्षित है। NULL की तरह, nullptr को भी किसी भी पॉइंटर प्रकार में परिवर्तित किया जा सकता है। लेकिन यह NULL की तरह पूर्णांक प्रकार में निहित रूप से परिवर्तनीय नहीं है।


  1. - C++ में मैट्रिक्स का सारणिक (Determinant of Matrix)

    एक मैट्रिक्स का सारणिक केवल वर्ग मैट्रिक्स के लिए गणना किया जा सकता है पहली पंक्ति के सहखंड (cofactor) को संबंधित सहखंड के सारणिक से गुणा करके और उन्हें वैकल्पिक चिह्नों के साथ जोड़कर अंतिम परिणाम प्राप्त किया जाता है। $$A = \begin{bmatrix}a & b & c\\d & e & f \\g & h & i \\ \end{bmatrix} |A| = a(

  1. - C++ में रेंज एडिशन - अंतर सरणी तकनीक

    समस्या विवरण मान लीजिए हमारे पास आकार n की एक सरणी है जो 0 से इनिशियलाइज़ है और हमारे पास एक मान k है, हम k अपडेट ऑपरेशन करेंगे। प्रत्येक ऑपरेशन को ट्रिपलेट के रूप में दर्शाया जाएगा: [startIndex, endIndex, inc] जो सबएरे A[startIndex ... endIndex] (startIndex और endIndex समावेशी) के प्रत्येक तत्व को

  1. C++ में लाइन रिफ्लेक्शन - Y-अक्ष के समानांतर सममित रेखा जांचें C++ में लाइन रिफ्लेक्शन - Y-अक्ष के समानांतर सममित रेखा जांचें

    समस्या विवरण मान लीजिए हमारे पास 2D तल पर n बिंदु हैं, हमें जांचना है कि क्या y-अक्ष के समानांतर कोई रेखा है जो दिए गए बिंदुओं को सममित रूप से प्रतिबिंबित करती है, दूसरे शब्दों में, जांचें कि क्या कोई ऐसी रेखा मौजूद है जो सभी बिंदुओं को दी गई रेखा पर प्रतिबिंबित करने के बाद मूल बिंदुओं का समुच्चय प