[英]Implicit enum values in C++
我正在將一些互操作代碼從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;
是的,在C ++ 03和C ++ 11標准中, 7.2枚舉聲明[dcl.enum] :
...沒有初始化程序的枚舉器定義為枚舉器提供的值是通過將前一個枚舉器的值增加一而獲得的。
還要注意,在沒有初始化程序的情況下,第一個枚舉值為0
。 在同一部分中:
如果第一個枚舉器沒有初始化程序,則相應常數的值為零。
是的,枚舉值會自動增加。 在C#中,您也可以使用相同的語法
公共枚舉_DWMWINDOWATTRIBUTE {DWMWA_NCRENDERING_ENABLED = 1,...}
是的,這是正確的,如果您為第一個條目提供一個值,那么所有下一個條目都是通過將上一個值增加1來獲得的。
在這種情況下,由於您為第一個枚舉條目賦予了一個值,因此接下來的條目分別為2,3,4,...。
如果不提供,則以0開頭(默認情況下)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.