2008-10-01 949 views
61

有沒有辦法找到C++中enum的最大和最小定義值?C++枚舉中的最大值和最小值

+1

它可以幫助人們回答更好,如果你描述你爲什麼想知道的最大值和最小值枚舉的值。 – JaredPar 2008-10-01 18:44:24

回答

70

不,沒有辦法找到C++中任何枚舉的最大和最小定義值。當需要這種信息時,定義Last和First值通常是一種好的做法。例如,

enum MyPretendEnum 
{ 
    Apples, 
    Oranges, 
    Pears, 
    Bananas, 
    First = Apples, 
    Last = Bananas 
}; 

有不需要爲FirstLast之間的每一個值將被命名值。

+2

對非序列枚舉仍然有用 - 只要你不期望每個值都存在 – 2012-01-11 06:50:49

+0

@Adrian:是的,這是事實。你不需要每個值都有一個定義的名稱,這種技術是有用的。我將相應地編輯 – 2012-01-11 20:22:24

22

不,不是標準的C++。您可以手動執行此操作:

enum Name 
{ 
    val0, 
    val1, 
    val2, 
    num_values 
}; 

num_values將包含enum中值的數量。

+0

num_values將包含數值-1的值 – 4pie0 2014-03-19 15:21:38

4

不是。C或C++中的枚舉只是一個常量列表。沒有更高的結構可以保存這些信息。

通常當我需要這種信息我在枚舉包括最大值和最小值是這樣的:

enum { 
    eAaa = 1, 
    eBbb, 
    eCccc, 
    eMin = eAaaa, 
    eMax = eCccc 
} 

有關如何這會很有用一些例子顯示這個網頁:Stupid Enum Tricks

3
enum My_enum 
    { 
     FIRST_VALUE = 0, 

     MY_VALUE1, 
     MY_VALUE2, 
     ... 
     MY_VALUEN, 

     LAST_VALUE 
    }; 

定義後,My_enum :: LAST_VALUE == N + 1

-2

你甚至都不需要他們,我做的是我剛纔說的,例如,如果您有:

enum Name{val0,val1,val2}; 

,如果你有switch語句和檢查的最後一個值達到做如下所示:

if(selectedOption>=val0 && selectedOption<=val2){ 

    //code 
} 
相關問題