2012-04-27 9 views
7

मैंने एक फ़ंक्शन बनाया जो फ़ंक्शन पॉइंटर स्वीकार करता है, उदा।क्या यह फ़ंक्शन पॉइंटर चर के लिए nullptr असाइन करना सुरक्षित है?

typedef CString(*GetLabelFunc)(const CSomeObject* const pObject); 

void DoSomething(GetLabelFunc funcGetLabel); 

फ़ंक्शन को शून्य सूचक प्राप्त हो सकता है और उस स्थिति में एक खाली स्ट्रिंग वापस कर देगा। यह MSVC में ++ 2010 बिल्कुल ठीक काम करता है जब साथ ही शून्य और पैरामीटर के रूप में nullptr का उपयोग कर - लेकिन मैं एक सफल संकलन इस तरह के विशेष मामलों में एक सुरक्षित बंदरगाह पर विचार नहीं करते ...

अब मैं सोच गुजर nullptr के लिए NULL के बराबर है समारोह पॉइंटर्स। कारण मैं पूछ रहा हूं कि उदाहरण के लिए void* फ़ंक्शन पॉइंटर्स स्वीकार नहीं करता है (या कम से कम इसका उपयोग नहीं किया जाना चाहिए)। तो शायद इसी तरह का एक कारण है कि फ़ंक्शन पॉइंटर्स के लिए नलप्टर का उपयोग नहीं किया जाना चाहिए - जिसका अर्थ है कि यह केवल ऑब्जेक्ट पॉइंटर्स के लिए काम करने के लिए डिज़ाइन किया गया है?

उत्तर

8

हां, नलप्टर को सभी सूचक प्रकारों के लिए शून्य सूचक मान में कनवर्ट करने के लिए निर्दिष्ट किया गया है, जिसमें फ़ंक्शन पॉइंटर प्रकार शामिल हैं।

देखें [conv.ptr] 4.10/1 और [basic.compound] 3.9.2/3।

संबंधित मुद्दे