2010-09-01 55 views

回答

22
  1. 枚舉只是一個右值,而不是左值。它沒有地址。
  2. 枚舉只能是編譯時間常量,而不是運行時常量。
  3. 枚舉不會添加任何膨脹到對象文件。
  4. 枚舉編譯速度更快,在編譯時使用更少的內存。通常它可以忽略不計,但是如果你正在做足夠複雜的元編程,它可能會開始變得重要。

一般來說,對於編譯時常量而不是運行時常量的東西來說,使用枚舉並沒有什麼不利之處,它的優點是讓你的意圖完全清晰並且效率更高。

編輯:另一個用於枚舉的用例可以解釋爲編譯器是否應該在運行時或編譯時計算函數。如果將函數的結果分配給immutable堆棧變量,則該函數將在運行時進行評估。如果在同一範圍內使用enum,則結果將在編譯時進行評估。

4

D中的IIRC enum A = B;與C中的#define A B差不多一樣。它在任何使用它的表達式中總是作爲一個字面值被嵌入。