Issue: Suppose an identifier has two different declarations, one in an outer block and one in a nested inner block. If the name is accessed within the inner block, which declaration is used?
Hypothesis: The closest definition will be used.
Proximity sounds like a good rule of thumb. Whatever was done most recently matters the most, right?
The Experiment: When we display the value of arg1
within the inner block, following its second declaration, we can get
an answer to our question:
int main() { int arg1; arg1 = -1; ... { char arg1 = 'A'; cout << arg1 << endl; } }
Question #8.9.1: If -1
is printed, what does this mean?
Question #8.9.2: If A
is printed, what does this mean?
Observation: Compile and execute your program.
Question #8.9.3: What does the program display?
Yes, you already wrote this down for the previous experiment. It won't hurt you to write it again.
Conclusions:
Question #8.9.4: Is our hypothesis correct? How do you know? If it's not correct, what should it be?