c++ - Why does the following program give a error? -
निम्न प्रोग्राम क्यों एक चेतावनी देते हैं?
नोट : इसका स्पष्ट है कि कॉन्स्ट पॉइंटर की आवश्यकता वाले फ़ंक्शन को सामान्य पॉइंटर भेजने से कोई चेतावनी नहीं होती है।
#include & lt; stdio.h & gt; शून्य सेम (const char ** p) {} int main (int argc, char ** argv) {sam (argv); वापसी 0; }
मुझे निम्न त्रुटि मिलती है,
फ़ंक्शन में `int main (int, char **) ':' char ** 'को तर्क के रूप में गुजरना `सैम (const char **) में से 1 'const'
बिना हस्तक्षेप के बिना सीवी-क्वालिटी जोड़ता है
यह कोड const सही का उल्लंघन करता है।
मुद्दा यह है कि यह कोड मूल रूप से असुरक्षित है क्योंकि आप अनजाने एक const वस्तु को संशोधित कर सकते हैं। सी ++ अकसर किये गए सवाल लाइट का जवाब इस में एक उत्कृष्ट उदाहरण है
class Foo {public: शून्य modify (); // कुछ इस वस्तु को संशोधित करें}; Int main () {कॉन्स्ट फू एक्स; फू * पी; फू कंस्ट्र ** q = & amp; p; // q अब पी के लिए अंक; यह (सौभाग्य से!) एक त्रुटि * q = & amp; x; // p अब एक्स पी- & gt; संशोधित करने के लिए इंगित करता है; // आउच: एक कॉन्स्ट फू को संशोधित करता है !! ...}
(मार्शल क्लाइन के सी ++ अकसर किये गए सवाल लाइट दस्तावेज से उदाहरण)
आप दो-तिहाई स्तरों को अवरुद्ध करने की समस्या को ठीक कर सकते हैं:
<पूर्व> शून्य सेम (चार कॉन्स्ट * कॉन्स्ट * पी) {}
Comments
Post a Comment