आपका कोड सी ++ 03 के संबंध में बीमार का गठन है। आप कभी भी एक कॉन्स (या अस्थिर) योग्य फ़ंक्शन प्रकार बना सकते हैं। जब भी आप करते हैं, आपका कार्यक्रम खराब हो जाता है।
यह नियम has been changed सी ++ 1x के लिए, संकलक को const
/volatile
को अनदेखा करने के लिए। सी ++ कंपाइलर आमतौर पर सी ++ 03 मोड में भी इस नियम को लागू करेंगे। इस प्रकार, निम्नलिखित दो एक ही फ़ंक्शन को दो बार परिभाषित करेंगे, और संकलन त्रुटि में परिणाम होंगे।
typedef void Ft();
void f(Ft const*) { }
void f(Ft *) { } // another definition!
यहां मेरे दावे का सबूत है। सी ++ 03, 8.3.5/1
एक सीवी-क्वालीफायर-सेक केवल एक nonstatic सदस्य समारोह के लिए समारोह प्रकार का हिस्सा होगा, समारोह प्रकार है जो करने के लिए सदस्य के लिए एक सूचक संदर्भित करता है, या उच्च-स्तरीय समारोह प्रकार एक कार्य typedef घोषणा के। फ़ंक्शन घोषणाकर्ता में सीवी-क्वालीफायर-सेक का प्रभाव फ़ंक्शन प्रकार के शीर्ष पर सीवी-योग्यता जोड़ने जैसा नहीं है, यानी, यह एक सीवी-योग्य फ़ंक्शन प्रकार नहीं बनाता है। वास्तव में, यदि किसी भी समय किसी प्रकार के निर्धारण में सीवी-योग्यता कार्य प्रकार बनता है, तो कार्यक्रम खराब हो जाता है।
यहाँ सी ++ 1x, के लिए है कि पाठ 8.3.5/7
n2914 है:
एक सीवी-quali फाई एर-सेक केवल एक गैर स्थिर सदस्य समारोह, समारोह प्रकार के लिए समारोह प्रकार का हिस्सा हो जाएगा जिसके लिए सदस्य के लिए एक सूचक संदर्भित करता है, या फ़ंक्शन टाइपपीफ घोषणा के शीर्ष-स्तरीय फ़ंक्शन प्रकार को संदर्भित करता है। फ़ंक्शन घोषणाकर्ता में एक सीवी-क्वालिफ़ी-सीईसी का ई एफएफ ईटीटी फ़ंक्शन प्रकार के शीर्ष पर सीवी-क्वालिफ़िकेशन जोड़ने जैसा नहीं है। बाद के मामले में, सीवी-क्वाली फायर को नजरअंदाज कर दिया जाता है।
उपरोक्त कहता है कि नीचे वैध है, हालांकि, और फ़ंक्शन के लिए फ़ंक्शन प्रकार बनाता है जो एक कॉन्स्ट सदस्य फ़ंक्शन घोषित कर सकता है।
typedef void Ft() const;
struct X { Ft cMemFn; };
void X::cMemFn() const { }
स्रोत
2009-07-13 08:32:04
अरे, उस मानक के विशेषज्ञ के बारे में मैं बात कर रहा था। : पी – GManNickG
हे, मैं मानक ग्रंथों के साथ teh n00b हूँ। लेकिन मुझे खुशी है कि आपको विश्लेषण पसंद है :) –
मैंने सी ++ 98 मानक पढ़ा है। यही कारण है कि मैं इसे नहीं मिला। –