C++ with enum and references: is this code valid, and if so what is printed?
#include
enum xyz { a, b, c };
int main()
{
int x = a, y = b, z = c;
int &p = x, &q = y, &r = z;
p = ++x;
q = ++y;
r = ++c; // attempt to increment an enum constant
cout << p << q << r;
return 0;
}
-
AThe program will print the output 1 2 3.
-
BThe program will print the output 2 3 4.
-
CThe program will print the output 0 1 2.
-
DIt will result in a compile time error.
-
EThe program will print the output 1 2 2.
Answer
Correct Answer: It will result in a compile time error.
Explanation
Introduction / Context: This question checks whether enum constants are modifiable lvalues. In C++, named enumeration constants are not variables; they are constant integral values and cannot be incremented.
Given Data / Assumptions:
enum xyz { a, b, c };defines constantsa=0,b=1,c=2.- Later code attempts
r = ++c;.
Concept / Approach: An expression like ++c requires c to be a modifiable lvalue. Enum enumerators are not variables; they are constant values in the type's value space. Therefore the increment is ill-formed, causing a compile-time error.
Step-by-Step Solution: 1) p = ++x; and q = ++y; are fine because x and y are variables. 2) ++c attempts to modify an enumerator, which is not allowed. 3) The program fails to compile at that line.
Verification / Alternative check: Replace r = ++c; with r = ++z; (where z is an int) to obtain a compilable variant that prints values.
Why Other Options Are Wrong: All printed outputs assume compilation success, which is false here.
Common Pitfalls: Confusing enumerator names with variables; assuming they can be incremented like normal integers.
Final Answer: Compile-time error due to attempting to increment an enum constant.