Login | Register   
RSS Feed
Download our iPhone app
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



Full Text Search: The Key to Better Natural Language Queries for NoSQL in Node.js

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){
  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.



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