enum Color1 { red, blue, green }; // ok
// enum Color2 { red, blue, green }; // error, enum conflicts
struct Color3
{
enum { red, blue, green }; // ok, no conflicts
};
enum class Color4 { red, blue, green }; // ok, no conflicts
Color1
and Color2
are both weak typing.Color3
and Color4
are both strong typing.My questions are:
1. Is there any difference between Color3
and Color4
?
2. Which to prefer? Color3
or Color4
? Why?
Color3
andColor4
are both strong typing
No. Try this:
int x = Color3::red; // ok
int y = Color4::red; // error: cannot convert from 'Color4' to 'int'
The legacy enum is implicitly convertible to an integer, but enum class
is it's own type.
As to which to prefer, refer to Why is enum class preferred over plain enum?