मैंने 3 कंपेलरों के साथ निम्न कोड का परीक्षण किया और 3 अलग-अलग परिणाम प्राप्त किए: त्रुटि, चेतावनी और ठीक है।nullptr_t से bool तक रूपांतरण: मान्य या नहीं?
- जीसीसी (5.3): त्रुटि: चेतावनी: 'bool' के लिए nullptr निरंतर की अंतर्निहित रूपांतरण 'std :: nullptr_t' 'स्थिरांक बात &'
- बजना (3.8) से अमान्य उपयोगकर्ता-निर्धारित रूपांतरण
- MSVC (14.1): कोई त्रुटि, तो कोई चेतावनी
कौन सा संकलक सही है? मुझे पता है कि यह एक सूचक प्रकार और bool
के बीच एक मामूली रूपांतरण है। लेकिन std::nullptr_t
और bool
के बारे में क्या है?
(अंत में, बजना और MSVC कोड के साथ दोनों ठीक हैं। बजना एक छोटा सा एक सकारात्मक रास्ते में अधिक वर्बोज़ है।)
struct Thing
{
Thing(bool) {}
};
void addThing(const Thing&){}
int main()
{
addThing(nullptr); // warning or error on this line
}
देखें मैं केवल तार्किक अंतर दिखाई से परेशान एक हूँ? (जवाब स्वयं नहीं)। मुझे यकीन है कि इसे अन्य कारणों से लागू किया गया था, लेकिन यह * वास्तव में * मुझे ऐसे मामले के रूप में हमला करता है जहां न ही '_cast' ऑपरेटर की अनुपस्थिति में काम करना चाहिए। –
@ ब्रेटहेल मेरी व्याख्या यह है कि 'नलप्टर' को केवल शून्य सूचक (किसी भी सूचक प्रकार और सदस्य प्रकार के लिए कोई सूचक) में रूपांतरित किया जा सकता है। 'बूल' में रूपांतरण स्पष्ट होना चाहिए, लेकिन फिर भी अनुमति है (अन्य पॉइंटर्स की स्थिरता के लिए?)। – songyuanyao
@ ब्रेट हेल मैं इसे असंगत के रूप में नहीं देखता हूं। एक कन्स्ट्रक्टर को स्पष्ट रूप से कॉल करना, आश्चर्यचकित आश्चर्य, रचनाकारों को कॉल करना जिन्हें स्पष्ट रूप से चिह्नित किया गया है, जो कि स्थिर कलाकारों की एक चीज है! ये आदिम प्रकार हैं इसलिए उनके पास सचमुच रचनाकार नहीं हैं लेकिन विचार समान है। –