[英]Can you explain this enum declaration?
我正在從JsonParser
讀取代碼,並且想知道此枚舉如何工作:
enum JsonTag {
JSON_NUMBER = 0,
JSON_STRING,
JSON_ARRAY,
JSON_OBJECT,
JSON_TRUE,
JSON_FALSE,
JSON_NULL = 0xF
};
這是否意味着將NULL
定義為半字節1111
?
這是否意味着NUMBER
和NULL
之間的每個值都將在0
和0xF
之間?
這是否意味着NULL
是某種內存位置?
STRING
, ARRAY
的值是什么?
為什么用這種方式聲明一個枚舉?
這很簡單。 枚舉值可以顯式分配或隱式定義。 當顯式分配時(如您的示例中的JSON_NULL
,它們僅具有此值。 在這種情況下,它是15。(不確定為什么在這里使用花哨十六進制表示法)。
隱式分配時,它們始終等於先前的枚舉值+ 1,第一個值設置為0。
並且,以防萬一,全名在那里定義。 不是NULL
,而是JSON_NULL
,不是NUMBER
,但是JSON_NUMBER
等。
這是否意味着將JSON_NULL定義為半字節1111?
值0x0F(十六進制)為十進制的15和二進制的1111。
這是否意味着JSON_NUMBER和JSON_NULL之間的每個值都將介於0和0xF之間?
不必要。 分配的enum
值與范圍無關。
當enum
標識符沒有特定值時,它將使用先前的值+ 1。
這是否意味着JSON_NULL是某種內存位置?
您可以獲得的唯一含義是為標識符JSON_NULL
分配了值15。沒有任何內容說明任何標識符的用途。
JSON_STRING,JSON_ARRAY ...的值是什么?
這是標識符的值:
enum JsonTag {
/* 0 */ JSON_NUMBER = 0,
/* 1 */ JSON_STRING,
/* 2 */ JSON_ARRAY,
/* 3 */ JSON_OBJECT,
/* 4 */ JSON_TRUE,
/* 5 */ JSON_FALSE,
/* 15 */ JSON_NULL = 0xF
};
為什么用這種方式聲明一個枚舉?
原因之一是具有順序符號,並允許使用非順序符號。 也許作者沒有定義15個符號,而僅定義了6個JSON_NULL
似乎具有15的特殊值,因此以這種方式列出。
您可能想探索json數據規范中的JSON
對象類型。
0xF
只是十六進制表示的15(十進制),對此沒有什么特別的。 枚舉條目具有顯式分配的值或上一個條目的值加一個。 這里沒有什么奇怪的,枚舉只有6個值,編號從0到5,然后是最終值,編號為15。總共有7個值,編號為0、1、2、3、4、5、15。為什么要這樣編號? 我不知道; 詢問編寫代碼的人。
- 這是否意味着將NULL定義為半字節1111?
否,通常,除非明確指定,否則基本枚舉類型為int。 在這種情況下,該值僅為0xF-那里沒有半字節。
- 這是否意味着NUMBER和NULL之間的每個值都將介於0和0xF之間?
它將從JSON_NUMBER = 0開始並增加一個直到JSON_FALSE,然后對於JSON_NULL它將是0xF
- 這是否意味着NULL是某種內存位置?
沒有。
- STRING,ARRAY ...的價值是多少?
如前所述。
- 為什么用這種方式聲明一個枚舉?
通常具有一個可以用作undefined
或invalid
。 它可以表示執行函數時出了點問題,因此enum值未設置為有效條目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.