2008-10-01 943 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 
} 
相关问题