सी ++ में, शाब्दिक 0
में टाइप int है। कम से कम एक दशमलव बिंदु जोड़ने के बिना, आप इसे पूर्णांक होने के बारे में कुछ भी नहीं बदल सकते हैं। (बिंदु के बाद अंक लिखने के लिए कोई वास्तविक जरूरत है, हालांकि)
आप के बारे में क्यों कॉल 0
साथ 123
साथ स्पष्ट लेकिन अस्पष्ट था निहित सवाल का जवाब करने के लिए:
जब आप A
प्रारंभ, यह ठीक था, क्योंकि इस मामले में एक इंट से पॉइंटर (char*
) में कोई अंतर्निहित रूपांतरण नहीं है।
जब आप C
किसी पूर्णांक दूसरी बार का उपयोग कर प्रारंभ, आप 0
इस्तेमाल किया, शाब्दिक 0
परोक्ष (, कुछ विरासत व्यवहार से पहले सी ++ 11 nullptr
शाब्दिक की पेशकश की) एक सूचक के लिए परिवर्तित किया जा सकता है।
तो, संक्षेप में:
int * a = 0; // legal;
int * b = 2; // ILLEGAL;
जब आरंभ C
एक रूपांतरण दो उपलब्ध कंस्ट्रक्टर्स के किसी भी (और दोनों रूपांतरण एक ही रैंकिंग है) करने के लिए तर्क देने के लिए की जरूरत है, कॉल अस्पष्ट है।
इसे स्पष्ट बनाने के लिए, आपको या तो अपने शाब्दिक को डबल ((double)0
) पर डालना चाहिए, एक डबल शाब्दिक (0.
) का उपयोग करें, या एक इंटीरियर लेने वाला एक कन्स्ट्रक्टर जोड़ें। इस अंतिम समाधान के साथ, int
लेने वाला कन्स्ट्रक्टर एक सटीक मिलान है, इसलिए यह एक बेहतर मिलान है कि एक और ओवरलोड को रूपांतरण की आवश्यकता होती है (यही कारण है कि इसे चुना जाएगा)।
संपादित करें। कृपया ध्यान दें कि टार्टनलामा उत्तर यहां स्वीकार किया जाना चाहिए क्योंकि यह एक सर्वोत्तम सी ++ अभ्यास है: सी-स्टाइल स्ट्रिंग लेने वाले निर्माता को std::string
इसके बजाय लेना चाहिए।चूंकि std::string
सी शैली स्ट्रिंग से एक अंतर्निहित रूपांतरण है, कॉल कम परिवर्तन के साथ काम करेंगे:
Var B("abc");
लेकिन आप संकेत दिए गए विवरण से अपनी कक्षा इंटरफेस को अलग होगा।
स्रोत
2015-06-22 14:13:32
क्या आपने एक निर्माता को जोड़ने का प्रयास किया है जो 'int' स्वीकार करता है, जिसे' डबल '-कन्स्ट्रक्टर कहते हैं? – Caramiriel
'सी ++ '' 0' में या तो एक * पूर्णांक शून्य * या * शून्य सूचक * हो सकता है। हाल ही में 'सी ++ 11' मानक पते जो * शून्य सूचक * के लिए कीवर्ड 'nullptr' पेश करके। – Galik
@ गैलिक: क्रमबद्ध करें। यह अभी भी सच है कि '0' संदिग्ध है। –