【问题标题】:implicit type conversion for enum type in CC中枚举类型的隐式类型转换
【发布时间】:2021-03-16 13:58:59
【问题描述】:

在 C 中,有没有办法为以下联合类型声明隐式类型转换:

enum COMP { 
  LessThan, 
  Equal, 
  GreaterThan 
};

将其映射到一个整数:

enum COMP { 
  LessThan : 1, 
  Equal : 0, 
  GreaterThan : -1 
};

【问题讨论】:

  • 隐式?不,不在 C 中。
  • 听起来像是一个答案! (他们可能是一种将比较运算符与这种类型相关联的方法吗?所以 LessThan
  • 所以联合实际上是指数学联合,而不是 C union?
  • 是的。我的错。 C 中的 unionenum 都是数学联合,但 union 已经在 C 中表示某些含义。我没有意识到我在混合术语,这令人困惑。
  • 我删除了 union 标签(这应该是关于 SQL 的)。

标签: c enums


【解决方案1】:

您拥有的是enum,而不是union似乎您要问的是您是否可以为枚举常量分配特定值。你可以这样做:

enum COMP { 
  LessThan=-1, 
  Equal=0, 
  GreaterThan=1 
};

此外,枚举被视为整数类型,因此您可以安全地与int 相互转换。

【讨论】:

  • 是的。您提出的重要术语。两者看起来都像“联合类型”的一般概念,但 C 中的 enumsunions 已经有了精确的含义。
【解决方案2】:

为了完整起见,如果值在 1 个区间内,您可以只定义第一个值:

enum COMP
{
    LessThan = -1,
    Equal, // will be 0
    GreaterThan // will be 1
};

【讨论】:

  • enum COMP { Equal, GreaterThan, LessThan = -GreaterThan };
  • 非常好的评论,应该是自己的答案!
  • @AntoninGAVREL,是的,它肯定应该,无论如何,你可以在其他地方投票,Eric 的好答案很多......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多