你能解释这个枚举声明吗?

Cam*_*ell -1 c++ enums

我正在阅读a中的代码JsonParser,我想知道这个枚举是如何工作的:

enum JsonTag {
    JSON_NUMBER = 0,
    JSON_STRING,
    JSON_ARRAY,
    JSON_OBJECT,
    JSON_TRUE,
    JSON_FALSE,
    JSON_NULL = 0xF
};
Run Code Online (Sandbox Code Playgroud)
  • 这是否意味着NULL定义为半字节1111

  • 这是否意味着,中间的每一个值NUMBER,并NULL会之间00xF

  • 这是否意味着NULL某种内存位置?

  • 什么会的价值STRING,ARRAY......是什么?

  • 为什么用这种方式声明枚举?

Ser*_*eyA 5

这很简单.可以显式指定或隐式定义枚举值.如果明确指定 - 就像JSON_NULL在您的示例中一样 - 它们只是具有此值.在这种情况下它是15.(不知道为什么在这里使用花式十六进制表示法).

当隐式分配时,它们总是等于先前的枚举值+ 1,第一个值被设置为0.

而且,以防万一,那里定义了全名.不NULL,但是JSON_NULL,不是NUMBER,但JSON_NUMBER等等