devxlogo

Unconsting a const Variable

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

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 (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 = #  // *pci is a contractual const int  int *pi  = const_cast (pci);   // get rid of contractual const  *pi = 2;    // OK, modify num's value

devx-admin

Share the Post: