鉴于此枚举和作业:
enum Points {point2d = 2, point2w, point3d = 3, point3w};
Points pt3d = point3d;
在刚刚超过此赋值的断点处,调试器报告pt3d的值为point2w。为什么不指向point3d?
答案 0 :(得分:2)
enum Points {point2d = 2, point2w, point3d = 3, point3w};
Points pt3d = point3d;
如果您没有为point2w
设置值,则会继续增加,然后point2d = 2
,point2w
将等于point3d
。 point3w
将等于4,因为point3d
设置为3。
您应该阅读this about enum。
希望对你有所帮助。
答案 1 :(得分:2)
enum
只是为枚举设置花哨的,编译时间类型安全名称的一种方法。会发生的是,每个枚举值都会被赋予一个数字整数值:
enum Points
{
// Explicitly map point2d to value 2.
point2d = 2,
// Let point2w get an automatic mapping - will be previous + 1 = 3.
point2w,
// Explicitly map pint3d to value 3.
point3d = 3,
// Let point3w get an automatic mapping - will be previous + 1 = 4.
point3w
}
因此,对于运行时,语句Points pt3d = point3d
与Points pt3d = 3
相同。显示时,调试器只需将第一个枚举值映射为反复数据3,即point2w
。