Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में const_cast - कास्टिंग ऑपरेटर टाइप करें

कार्य को देखते हुए c++ में const_cast की कार्यप्रणाली को दिखाना है।

const_cast टाइप कास्टिंग ऑपरेटरों में से एक है। इसका उपयोग किसी वस्तु के स्थिर मान को बदलने के लिए किया जाता है या हम कह सकते हैं कि इसका उपयोग किसी वस्तु की निरंतर प्रकृति को दूर करने के लिए किया जाता है।

const_cast का उपयोग उन प्रोग्रामों में किया जा सकता है जिनमें कुछ स्थिर मूल्य वाली कोई वस्तु होती है जिसे कभी-कभी किसी बिंदु पर बदलने की आवश्यकता होती है।

सिंटैक्स

वाक्य रचना इस प्रकार है -

const_cast<type name>(expression)

उदाहरण

Input:
const int x = 50;
const int* y = &x;
cout<<"old value is"<<*y<<"\n";
int* z=const_cast<int *>(y);
*z=100;
cout<<"new value is"<<*y;
Output: old value is 50
new value is 100

निम्नलिखित उदाहरण const_cast का मूल उपयोग दिखाता है। यहां हमने int प्रकार का एक निरंतर चर "x" घोषित किया है जिसे 50 का मान दिया गया है और एक अन्य स्थिर सूचक "y" प्रकार int है जो चर "x" पर इंगित करता है।

const_cast का उपयोग करने के लिए एक तीसरा पॉइंटर बनाया जाना है, और यहां हमने समान डेटा प्रकार, यानी int का पॉइंटर "z" बनाया है।

इसलिए जब हम अपने निरंतर सूचक “y” को पास करते हैं, जो स्थिर चर “x” को const_cast में इंगित करता है, और सूचक z को एक मान निर्दिष्ट करता है, तो हम अपने स्थिर सूचक “y” के मान में परिवर्तन करने में सक्षम होते हैं। पी>

इस तरह हम const_cast का उपयोग करके स्थिर मान को 50 से 100 में बदलने में सक्षम थे।

यदि हम "x" के मान को बदलने की कोशिश करते हैं, जो कि पॉइंटर "y" बिना const_cast का उपयोग किए इंगित कर रहा है, तो निम्न त्रुटि दिखाई देगी- "केवल-पढ़ने के स्थान का असाइनमेंट"

उदाहरण

Input:
const int x = 50;
const int* y = &x;
cout<<"old value is"<<*y<<"\n";
int* z=const_cast<int *>(y);
*z=100;
cout<<"new value is"<<*y;
Output: old value is

निम्नलिखित कार्यक्रम में उपयोग किया गया दृष्टिकोण इस प्रकार है -

  • पहले int प्रकार का एक स्थिर चर बनाएं और इसे कुछ उपयुक्त आकार दें, मान लें कि "a" और इसका मान 20 है।
  • फिर एक स्थिर पॉइंटर बनाएं, हम उसी डेटा प्रकार का "बी" कहें और इसे हमारे निरंतर चर "ए" का पता आवंटित करें।
  • फिर एक तीसरा पॉइंटर बनाएं, मान लें कि डेटा प्रकार int का "c" const_cast के लिए उपयोग किया जाना है।
  • अब हमारे कॉन्स्टेंट पॉइंटर “b” को const_cast में पास करें और इसे हमारे पॉइंटर “c” के बराबर रखें।
  • आखिरकार हमारे पॉइंटर “c” के मान में बदलाव करें। यह स्वचालित रूप से उस मान में परिवर्तन करेगा जिस पर हमारा स्थिर सूचक "बी" इंगित कर रहा है।

एल्गोरिदम

Start
Step 1 -> In function main()
Declare a constant int a=20
Declare a constant pointer int* b=&a
Declare a pointer int*c = const_cast<int *>(b)
Assign *c=40
Stop

उदाहरण

#include <iostream>
using namespace std;
int main() {
   const int a = 20;
   const int* b = &a;
   cout<<"old value is"<<*b<<"\n";
   int* c=const_cast<int *>(b);
   *c=40;
   cout<<"new value is"<<*b;
   return 0;
}

आउटपुट

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -

old value is 20
new value is 40

यहां, निरंतर सूचक "बी" को स्थिर चर "ए" पर मूल्य =20 के साथ इंगित किया जाता है जो अपरिवर्तनीय है। लेकिन एक ही डेटा प्रकार का तीसरा गैर-स्थिर सूचक "c" बनाकर और const_cast का उपयोग करके हम उस स्थिर मान को बदलने में सक्षम हैं।

सूचक "सी" के मूल्य में परिवर्तन के परिणामस्वरूप स्थिर मूल्य 20 में परिवर्तन हुआ जिस पर स्थिर सूचक "बी" इंगित कर रहा था। इसलिए const_cast का उपयोग करने से पहले आउटपुट मान 20 था और इसका उपयोग करने के बाद आउटपुट मान 40 था।

const_cast के अन्य उपयोग

किसी भी प्रोग्राम में, const_cast का उपयोग निरंतर डेटा को किसी अन्य फ़ंक्शन को पास करने के लिए किया जा सकता है जो निरंतर डेटा स्वीकार नहीं करता है।

उदाहरण

#include <iostream>
using namespace std;
int change(int* p2) {
   return (*p2 * 10);
}
int main() {
   const int num = 100;
   const int *p = #
   int *p1 = const_cast <int *>(p);
   cout << change(p1);
   return 0;
}

आउटपुट

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -

1000

निम्न प्रोग्राम दिखाता है कि कैसे हम किसी भी स्थिर डेटा को प्राप्त नहीं करने वाले फ़ंक्शन चेंज () में const_cast का उपयोग करके 100 के निरंतर मान को पारित करने में सक्षम हैं।

परिवर्तन () फ़ंक्शन मान प्राप्त करता है और इसे 10 से गुणा करता है और इसे मुख्य () फ़ंक्शन पर वापस लौटाता है जो अंतिम आउटपुट, यानी 1000 उत्पन्न करता है।

यदि हम बिना const_cast के समान प्रोग्राम चलाते हैं और स्थिर मान को सीधे change() फ़ंक्शन में पास करने का प्रयास करते हैं, तो यह त्रुटियाँ दिखाएगा।


  1. C/C++ में टाइप कास्ट क्या है?

    टाइप कास्टिंग एक चर को एक डेटा प्रकार से दूसरे डेटा प्रकार में बदलने का एक तरीका है। उदाहरण के लिए, यदि आप एक लॉन्ग वैल्यू को एक साधारण पूर्णांक में स्टोर करना चाहते हैं तो आप लॉन्ग से इंट टाइप कर सकते हैं। आप कास्ट ऑपरेटर . का उपयोग करके स्पष्ट रूप से मानों को एक प्रकार से दूसरे प्रकार में परिवर्ति

  1. C++ में कास्टिंग ऑपरेटर क्या है?

    एक कास्ट एक विशेष ऑपरेटर है जो एक डेटा प्रकार को दूसरे में बदलने के लिए बाध्य करता है। एक ऑपरेटर के रूप में, एक कास्ट यूनरी होता है और किसी भी अन्य यूनरी ऑपरेटर के समान पूर्वता रखता है। अधिकांश C++ कंपाइलरों द्वारा समर्थित सबसे सामान्य कास्ट इस प्रकार है - (type) expression वांछित डेटा प्रकार कहां ह

  1. C++ . में रिलेशनल ऑपरेटर्स

    C++ प्रोग्रामिंग में, दो वेरिएबल्स में स्टोर किए गए मानों की तुलना निम्नलिखित ऑपरेटरों का उपयोग करके की जा सकती है और उनके बीच संबंध निर्धारित किया जा सकता है। इन ऑपरेटरों को रिलेशनल ऑपरेटर कहा जाता है। उपलब्ध विभिन्न C++ संबंधपरक ऑपरेटर हैं - संचालक विवरण इससे बड़ा = इससे बड़ा या इसके