簡體   English   中英

你能解釋一下這個枚舉聲明嗎?

[英]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

  • 這是否意味着NUMBERNULL之間的每個值都將在00xF之間?

  • 這是否意味着NULL是某種內存位置?

  • STRINGARRAY的值是什么?

  • 為什么用這種方式聲明一個枚舉?

這很簡單。 枚舉值可以顯式分配或隱式定義。 當顯式分配時(如您的示例中的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 ...的價值是多少?

如前所述。

  • 為什么用這種方式聲明一個枚舉?

通常具有一個可以用作undefinedinvalid 它可以表示執行函數時出了點問題,因此enum值未設置為有效條目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM