5.2.2 · HinglishC++ Programming

References — lvalue references, difference from pointers

1,672 words8 min readRead in English

5.2.2 · Coding › C++ Programming


lvalue reference KYA hota hai?

"lvalue" KYU? lvalue woh expression hota hai jo kisi storage location ka naam deta hai (yeh = ke left pe baith sakta hai). lvalue reference sirf aisi cheez se bind ho sakta hai — tum int& r = 5; nahi likh sakte kyunki 5 ka koi address nahi jise alias kiya ja sake. (Exception const int& r = 5; special hai aur baad mein dikhaya gaya hai.)


Hood ke andar KAISE kaam karta hai

Memory mein ACTUALLY kya hota hai: compiler ek reference ko typically ek aisi pointer ki tarah implement karta hai jo auto-deref ho — lekin semantically koi alag object nahi hota. Tumhe reference ka apna address kabhi nahi dikhta; &r tumhe &x deta hai.

Figure — References — lvalue references, difference from pointers

References vs Pointers — core comparison

Feature Reference int& Pointer int*
Kya alag object hai? Nahi (alias) Haan (address hold karta hai)
Initialize karna zaroori? Haan Nahi
Null ho sakta hai? Nahi Haan (nullptr)
Reseat ho sakta hai? Nahi Haan
Use karne ka syntax r (auto-deref) *p (explicit deref)
Address-of deta hai original ka address pointer ka khud ka address
Pointer arithmetic Nahi Haan

References KYU exist karte hain — pass-by-reference

Sabse bada use: caller ki variable ko copy kiye bina modify karo.


Common mistakes (Steel-man + fix)


Active recall

Recall Quick self-test (answers chhupa ke karo)
  • Kya reference null ho sakta hai? → Nahi.
  • Kya reference ko kisi aur variable ka alias banane ke liye reseat kiya ja sakta hai? → Nahi.
  • int& r = x; ke liye &r kya return karta hai? → &x (same address).
  • const int& r = 5; compile kyun hota hai lekin int& r = 5; nahi? → const ref temporary bind kar sakta hai; non-const nahi kar sakta.
  • std::string parameter ki jagah const std::string& prefer karne ki ek wajah? → copying se bachata hai.
Recall Feynman: 12-saal ke bacche ko samjhao

Socho tumhara dog "Rex" naam ka hai. Tumhari chhoti behan use "Buddy" bulana shuru kar deti hai. Ab dog ke do naam hain lekin woh ek hi dog hai — koi bhi naam pukaro, wahi dog aata hai. Reference variable ka doosra nickname hai: do naam, ek cheez. Pointer alag hai — yeh ek sticky note ki tarah hai jisme dog ke ghar ka address likha ho. Tum note mita ke doosra address likh sakte ho (kahin aur point karo), ya ise blank chhod sakte ho. Nickname kabhi doosre dog ke liye nahi badla ja sakta, aur kabhi blank nahi ho sakta.


Connections

lvalue reference kya hota hai?
Ek alias — kisi existing object ka doosra naam, same memory share karta hai.
Kya lvalue reference ko declaration pe initialize karna zaroori hai?
Haan; int& r; illegal hai.
Kya lvalue reference baad mein kisi doosre object ko refer karne ke liye reseat ho sakta hai?
Nahi, kabhi nahi; yeh apne initial object se bound rehta hai.
Kya reference null ho sakta hai?
Nahi — null reference nahi hoti.
int& r = x; ke liye &r kya evaluate hota hai?
&x — original ka address (reference ka koi alag address nahi hota).
int& r = 5; fail kyun hota hai lekin const int& r = 5; succeed karta hai?
Non-const lvalue ref temporary bind nahi kar sakta; const ref kar sakta hai aur uski lifetime extend karta hai.
Reference aur T* const pointer mein kya fark hai?
Const pointer phir bhi ek alag object hai jo address hold karta hai jise tum inspect/deref kar sakte ho; reference koi alag object nahi hai.
Parameter ke roop mein std::string ki jagah const std::string& kyun prefer karein?
String ki copying se bachata hai aur use modify karna forbid karta hai.
Local variable ka reference return karne ka kya khatre?
Local return pe mar jaata hai, dangling reference chhod jaata hai (undefined behavior).
swap(int& a, int& b) mein andar * ya & kyun nahi chahiye?
a aur b caller ki variables ke aliases hain, directly use hote hain.

Concept Map

hai ek

share karta hai

require karta hai

constraint

constraint

isliye

contrast karta hai

stores address, reseatable, nullable

enable karta hai

example

lvalue reference T&

Alias - doosra naam

Same memory box

Declaration pe initialize karna zaroori

Rebind nahi ho sakta

Null nahi ho sakta

&r original address deta hai

Pointer T*

Pass-by-reference

swap without copy