5.2.3 · HinglishC++ Programming

const correctness — const variables, const pointers, const member functions

1,999 words9 min readRead in English

5.2.3 · Coding › C++ Programming


1. const variables

Turant initialize kyun karen? Kyunki baad mein koi aisa waqt nahi aata jab tum use likhne ki ijazat rakhte ho. Agar tum ab init nahi kar sakte, toh kabhi nahi kar sakte.

Compiler ise KAISE treat karta hai: Ek const int jo compile-time constant se initialize ho, use binary mein fold kiya ja sakta hai (true constant). Runtime par initialize kiya gaya const phir bhi ek normal read-only memory slot hota hai.


2. const aur pointers — ise DAYEN SE BAYEN padho

Yahan sabka pairon tale zameen khisak jati hai. Trick yeh hai: declaration ko right to left padho, aur yaad rakho:

Declaration Padho aise Value badal sakte ho? Pointer badal sakte ho?
const int* p pointer to const int *p p
int* const p const pointer to int *p p
const int* const p const pointer to const int
Figure — const correctness — const variables, const pointers, const member functions

3. const member functions

const this ke saath KYA karta hai?

  • Non-const method mein, this ka type Circle* hota hai (ya sach mein Circle* const).
  • Const method mein, this const Circle* ban jata hai — toh andar har data member read-only ho jata hai.

4. Aam galtiyan (steel-manned)


5. Active recall

Recall Quick self-test (jawab dhako)
  • Const variable ko declaration par hi initialize kyun karna padta hai? → Baad mein koi bhi write kabhi allowed nahi hoti.
  • int* const p — tum kya badal sakte ho? → Pointed-to value, pointer nahi.
  • Const method ke andar this ka type kya hota hai? → const ClassName*.
  • const object par kaun se methods call kar sakte ho? → Sirf const member functions.
  • Kaun sa keyword data member ko const method ke andar badalne deta hai? → mutable.
Recall Feynman: 12 saal ke bacche ko explain karo

Ek sheesha display case imagine karo. const woh sheesha hai: tum andar rakhil khilone ko dekh sakte ho lekin chhu nahi sakte. "Pointer to const" ek ungli hai jo kisi bhi case ki taraf point kar sakti hai lekin andar kabhi nahi ja sakti. "Const pointer" ek ungli hai jo EK case par chipki hui hai lekin tum us ek ko khol sakte ho. "Const member function" ek museum guide hai jo wada karta hai ki woh sirf exhibits dikhayega, kabhi unhe rearrange nahi karega — toh locked (const) rooms bhi guide ko andar aane dete hain.


Const correctness kya hai?
Const ka use karke apni intent declare karna ki data modify nahi karoge, taaki compiler compile time par read-only-ness enforce kar sake bina kisi runtime cost ke.
Const variable ko turant initialize kyun karna padta hai?
Kyunki declaration ke baad use kabhi assign nahi kiya ja sakta, toh ise value milne ka ek hi mauka hota hai — declaration par.
const int* const p ko kaise padhte hain?
Right-to-left: "p ek const pointer hai to a const int" — na pointer badal sakta hai, na pointed-to value.
const int* p mein kya protected hai?
Pointee (woh int) — tum *p = ... nahi kar sakte, lekin p ko repoint KAR sakte ho.
int* const p mein kya protected hai?
Pointer khud — tum p ko repoint nahi kar sakte, lekin *p = ... KAR sakte ho.
Member function ke parameter list ke baad const kya promise karta hai?
Ki function object ke (non-mutable) data members ko modify nahi karega; this const ClassName* ban jata hai.
Const object par kaun se member functions call ho sakte hain?
Sirf woh jo const declare hain.
mutable kya karta hai?
Kisi specific data member ko const member functions ke andar bhi modify karne deta hai (caches, mutexes, counters ke liye).
C++ mein const-ness deep hoti hai ya shallow?
Shallow (bitwise): ek const object ka pointer member ek const pointer ban jata hai, lekin jis data ko woh point karta hai woh automatically const nahi hota.
Originally-const object par const_cast-phir-modify karna dangerous kyun hai?
Yeh undefined behavior hai; const object read-only memory mein ho sakta hai.
Const kis side se bind karta hai, yeh rule kya hai?
Yeh apne left ke type se bind hota hai; agar left mein kuch nahi hai, toh right ke type se bind hota hai.
const int x ko #define X se prefer kyun karte hain?
const typed, scoped, aur debugger aur compiler ko visible hota hai; #define andha text substitution hai.

Connections

Concept Map

enforced at

enables

enables

requires

forbids

decoded by

const left of star

const right of star

used for

declares intent

promises no

const promise to compiler

const variable

must init at declaration

never reassigned

const with pointers

read right to left

pointer to const int

const pointer to int

const& parameters

const member function