Difficulty: Medium
Correct Answer: 0
Explanation:
Introduction / Context:
This item tests default initialization rules for objects with static storage duration and the effect of not invoking an initializing member function. The code defines a global object I
of type India
which, in turn, contains a subobject B
of a nested struct
.
Given Data / Assumptions:
I
is defined at namespace scope (global).B
is a non-static data member of I
and therefore part of a global object.Function()
is never called in main
.Display()
prints the value of y
.
Concept / Approach:
Objects with static storage duration (globals) are zero-initialized before any dynamic initialization occurs. Since Function()
is never invoked, x
and y
retain their zero-initialized values. Therefore, Display()
prints 0.
Step-by-Step Solution:
Because I
is global, I.B.x
and I.B.y
start as 0.No call to I.B.Function()
occurs; thus values are unchanged.Printing y
outputs 0
followed by a newline.
Verification / Alternative check:
Add a call to I.B.Function()
before Display()
to see a non-zero result.
Why Other Options Are Wrong:
Options B/C/D assume either one or negative/indeterminate values; zero-initialization for globals guarantees 0 here.
Common Pitfalls:
Assuming uninitialized garbage for globals; in C++, globals are zero-initialized, unlike certain local automatic variables.
Final Answer:
0
Discussion & Comments