TL;DR:假设,给定enum NAME {...};
,这与执行期间enum NAME n
相同吗?即使它被声明为 ,也可以int n
像? 原因:我真的想将类型用于返回标志,作为关于位操作的“关闭”类型。n
signed int
enum NAME
enum
例如: Let typedef enum FLAGS { F1 = 0x00000001, F2 = 0x00000002, F3 = 0x00000004 } FLAGS ;
Then,FLAGS f = F1 | F2;
赋值3
给f
,不抛出任何相关的错误或警告。这个和许多其他编译器允许的使用场景,例如f++
,让我觉得我可以合法地把f
它当作一个signed int
. 使用的编译器:MSVC'19, 16.9.1,设置“C17 (2018) Standard (/std:c17)”;
我搜索了标准(这里的草图)并查看了其他相关问题,但没有提到任何可疑(并希望)是 to 的“无声促销” enum NAME x
,signed int x
即使标识符具有那种类型。这让我相信,enum
当分配一个不是成员的值时,行为方式是依赖于实现的。我要求,部分是为了确认或否认这一说法。