0

我想知道在 C++ 中使用 typedef + 常量与使用枚举列表的区别。差异对我来说似乎很重要的原因是因为我使用的枚举在中间会中断连续性,迫使“丑陋”

使用这两种方法的一副纸牌示例,您需要为卡片的价值和花色定义新类型:

enum Value{
    ace = 1,
    //Biggest issue is I dont want to have two = 2 etc. until 10
    jester = 11,
    queen = 12,
    king = 13
};

在这个例子中,问题是如果我想要一个新的值是数字,假设 7 我不能这样做:

Value a_value = 7; //Won't allow int to Value
Value a_value = seven; //This extra enum seems just bad

另一种选择是:

typedef char Value
#define ace 1
#define jester 11
#define queen 12
#define king 13

这基本上是相同的结果,但使用这种方法它会让我这样做:

Value a_value = 7;

我可以将第二种方法与#define 一起使用还是这样做的错误方法?

4

2 回答 2

3

在您的示例中,我认为该enum解决方案更好,它可以防止以下用法:

Value a = 0;   //illegal
Value b = 14;  //illegal

只需填写 和 之间的空白ace即可jester。这似乎没有害处。在我看来,代码甚至看起来更干净:

enum Value{
    ace = 1,
    two,
    three,
    four,
    five,
    six,
    seven,
    eight,
    nine,
    ten,
    jester,
    queen,
    king
};
于 2013-09-29T05:44:23.823 回答
0

你可以这样做

enum Value ={ace=1, two,...};
Value a_value = static_cast<Value>(some int value, in enum range);
于 2013-09-29T14:26:21.850 回答