अगर मैं सभी निम्नलिखित ठीक है कार्य करें:static_cast शून्य * चार * बनाम static_cast शून्य ** चार **
char* cp = "abc";
void* vp = NULL;
vp = static_cast<void*>(cp);//ok
cp = static_cast<char*>(vp);//ok
लेकिन निम्नलिखित नहीं है:
char** cpp = &cp;
void** vpp = NULL;
vpp = static_cast<void**>(cpp);//error C2440: 'static_cast':
//cannot convert from 'char **' to 'void **'
cpp = static_cast<char**>(vpp);//error C2440: 'static_cast':
//cannot convert from 'void **' to 'char **'
कृपया किसी को समझा सकता है मैं क्यों दूसरे उदाहरणों की अनुमति नहीं है। कृपया सी ++ मानक को अपने पूरे उत्तर के रूप में उद्धृत न करें, क्योंकि मैंने पहले ही जवाब देखे हैं जो उद्धरण देते हैं, और मुझे समझ में नहीं आता कि उनका क्या अर्थ है। मैं क्यों समझना चाहता हूं दूसरे उदाहरण काम नहीं करते हैं (यानी यदि आप एक उदाहरण दे सकते हैं जहां यह खतरनाक होगा कि यह एक बड़ी मदद होगी)। क्योंकि मुझे यह नहीं मिला है। मेरे लिए, दोनों उदाहरण कास्टिंग पॉइंटर्स हैं। संकेत का एक अतिरिक्त स्तर कोई फर्क क्यों पड़ता है?
आप किसी भी सूचक को 'शून्य * ', और स्थिर दिशा में स्थिर-कास्ट में रूपांतरित कर सकते हैं। लेकिन यह सामान्य रूप से 'टी *' और 'यू *' के लिए सच नहीं है, जो असंबंधित हैं। (अब 'टी = char *' और 'यू = शून्य * ') –
सोचें कि आप' char ** 'को' void *' और इसके विपरीत बना सकते हैं। –
@ केरेक एसबी - हाँ, लेकिन इसकी अनुमति क्यों नहीं है? यह असुरक्षित कब होगा? – e244