📖 Scenario: Imagine you have a box with a label that points to another box. In C++, references are like labels that point to variables. But these labels must always point to something that exists. If the box disappears, the label becomes useless and can cause problems.
🎯 Goal: You will create a simple C++ program to see how references work and how their lifetime depends on the variables they refer to. You will learn to create a reference, use it safely, and understand what happens if the original variable goes out of scope.
📋 What You'll Learn
Create an integer variable called number with value 10.
Create a reference to number called refNumber.
Create a block scope where you create a new integer temp and a reference refTemp to it.
Print the values of number, refNumber, temp, and refTemp.
Observe what happens when temp goes out of scope.
💡 Why This Matters
🌍 Real World
References are used in C++ to avoid copying large data and to allow functions to modify variables directly.
💼 Career
Understanding reference lifetime is important for writing safe and efficient C++ code in software development jobs.
Progress0 / 4 steps
1
Create an integer variable number with value 10
Write a line of code to create an integer variable called number and set it to 10.
C++
Hint
Use the syntax int variableName = value; to create an integer variable.
2
Create a reference refNumber to the variable number
Write a line of code to create a reference called refNumber that refers to the variable number.
C++
Hint
Use int& refName = variableName; to create a reference.
3
Create a block with a new integer temp and a reference refTemp to it
Write code to create a new block (using curly braces). Inside this block, create an integer variable called temp with value 20 and a reference called refTemp to temp.
C++
Hint
Use curly braces { } to create a block. Inside, declare temp and refTemp similarly to previous steps.
4
Print the values of number, refNumber, temp, and refTemp
Write code to print the values of number and refNumber outside the block, and print temp and refTemp inside the block. Use std::cout with \n for new lines.
C++
Hint
Use std::cout << variable << "\n"; to print each value on its own line.
Practice
(1/5)
1. What does reference lifetime in C++ mean?
easy
A. The time it takes to create a reference
B. How long a reference remains valid during program execution
C. The size of the reference in memory
D. The number of references to a variable
Solution
Step 1: Understand what a reference is
A reference is an alias for another variable, so it must point to valid data.
Step 2: Define lifetime in this context
Reference lifetime means the duration the reference points to valid memory without becoming invalid.
Final Answer:
How long a reference remains valid during program execution -> Option B
Quick Check:
Reference lifetime = validity duration [OK]
Hint: Reference lifetime = how long it stays valid [OK]
Common Mistakes:
Confusing lifetime with creation time
Thinking lifetime is about memory size
Assuming references count how many times used
2. Which of the following is the correct way to declare a reference to an int variable x?
easy
A. int &ref = x;
B. int ref = &x;
C. int &ref();
D. int *ref = x;
Solution
Step 1: Recall reference declaration syntax
References use & after the type, e.g., int &ref.
Step 2: Check each option
int &ref = x; correctly declares a reference to x. Others either declare pointers or incorrect syntax.
Final Answer:
int &ref = x; -> Option A
Quick Check:
Reference syntax = type &name = variable [OK]
Hint: References use & after type, not * or parentheses [OK]
Common Mistakes:
Using * instead of & for references
Adding parentheses after reference name
Assigning address instead of reference
3. What will be the output of this code?
int &getRef() {
int x = 10;
return x;
}
int main() {
int &r = getRef();
std::cout << r << std::endl;
return 0;
}
medium
A. Undefined behavior (likely garbage value)
B. Compilation error
C. 10
D. 0
Solution
Step 1: Analyze function return
The function returns a reference to a local variable x which is destroyed after the function ends.
Step 2: Understand consequences
Using that reference in main leads to undefined behavior because x no longer exists.
Final Answer:
Undefined behavior (likely garbage value) -> Option A
Quick Check:
Returning local reference = undefined behavior [OK]
Hint: Never return references to local variables [OK]
Common Mistakes:
Assuming local variable reference is valid after return
Expecting compilation error
Thinking it prints 0 always
4. Identify the error in this code snippet:
int& createRef() {
int temp = 5;
return temp;
}
int main() {
int &r = createRef();
std::cout << r << std::endl;
}
medium
A. Reference variable declared without initialization
B. Missing semicolon after return statement
C. Returning reference to a local variable which is destroyed
D. Using & instead of * for pointer
Solution
Step 1: Check what is returned
The function returns a reference to temp, a local variable.
Step 2: Understand lifetime issue
Local variable temp is destroyed when function ends, so reference is invalid.
Final Answer:
Returning reference to a local variable which is destroyed -> Option C
Quick Check:
Returning local reference = lifetime error [OK]
Hint: Local variables die after function ends; don't return their references [OK]
Common Mistakes:
Thinking compiler allows returning local references safely
Confusing references with pointers
Ignoring variable lifetime rules
5. How can you safely return a reference from a function in C++?
hard
A. Return a reference to a temporary object
B. Return a reference to a local variable
C. Return a pointer instead of a reference
D. Return a reference to a static or global variable
Solution
Step 1: Understand safe reference return
References must refer to valid memory after function ends.
Step 2: Identify valid memory sources
Static or global variables live beyond function scope, so returning their reference is safe.
Step 3: Evaluate other options
Local variables and temporaries die after function ends; pointers don't guarantee safety here.
Final Answer:
Return a reference to a static or global variable -> Option D