C++ 中的隐式枚举值

ser*_*0ne 1 c++ enums

我正在将一些互操作代码从 C++ 中的 DWM Api 移植到 C#。该DWMWINDOWATTRIBUTE枚举只有明确定义,一个价值,我想知道如果剩余价值(评论)是正确的?

typedef enum _DWMWINDOWATTRIBUTE { 
  DWMWA_NCRENDERING_ENABLED          =  1,
  DWMWA_NCRENDERING_POLICY,          // 2
  DWMWA_TRANSITIONS_FORCEDISABLED,   // 3
  DWMWA_ALLOW_NCPAINT,               // 4
  DWMWA_CAPTION_BUTTON_BOUNDS,       // 5
  DWMWA_NONCLIENT_RTL_LAYOUT,        // 6
  DWMWA_FORCE_ICONIC_REPRESENTATION, // 7
  DWMWA_FLIP3D_POLICY,               // 8
  DWMWA_EXTENDED_FRAME_BOUNDS,       // 9
  DWMWA_HAS_ICONIC_BITMAP,           // 10
  DWMWA_DISALLOW_PEEK,               // 11
  DWMWA_EXCLUDED_FROM_PEEK,          // 12
  DWMWA_CLOAK,                       // 13
  DWMWA_CLOAKED,                     // 14
  DWMWA_FREEZE_REPRESENTATION,       // 15
  DWMWA_LAST                         // 16
} DWMWINDOWATTRIBUTE;
Run Code Online (Sandbox Code Playgroud)

jua*_*nza 5

是的,在 C++03 和 C++11 标准中,7.2 枚举声明 [dcl.enum]

...没有初始化器的枚举器定义为枚举器提供了通过将前一个枚举器的值增加 1 获得的值。

另请注意,在没有初始化程序的情况下,第一个枚举值是0。来自同一部分:

如果第一个枚举器没有初始化器,则相应常量的值为零。