Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Home » Tip Bank » C++
Language: C++
Expertise: All
Feb 26, 1999

Unconsting a const Variable

There are two types of const data storage: true const and contractual const.
 
  const int cn = 5; // true const
A contractual const variable is a non-const one, which is treated as though it were const:
 
  void ReadValue(const int& num){
    cout<<num;
  }
  int main()  {
    int n =0;
    ReadValue(n); //contractual constness; non-const n is not modified by ReadValue()
  }
When a true const variable is explicitly cast to a non-const one, the result of an attempt to change it is undefined. This is because an implementation may store true const data in the read-only memory (using an explicit cast to remove constness does not change the physical memory properties of a variable). For example:
 
  const int cnum = 0; //true const, may be stored in the machine's ROM
  const int * pci = &cnum 
  int *pi  = const_cast<int*> (pci);     // brute force attempt to unconst a variable
  *pi = 2;    // undefined, an attempt to modify a true const variable through a pointer
On the other hand, casting away contractual constness of a variable enables you to change its value:
 
  int num = 0;
  const int * pci = &num  // *pci is a contractual const int
  int *pi  = const_cast<int*> (pci);   // get rid of contractual const
  *pi = 2;    // OK, modify num's value
Danny Kalev
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date