这是不是效率低下

Is this inefficient?

本文关键字:效率 是不是      更新时间:2023-10-16

扩展这个问题,我想使用我的枚举val,因为它们"应该"是

#include <stdio.h>
enum E{ A, B, C } ;
#define inc(enVal) (*((int*)&enVal))++
int main()
{
  E t = A ;
  inc( t ) ;
  printf( "t %dn", t ) ;
}

现在,t是一个枚举类型E的变量,我有一个宏inc,它将t的值增加1,

那么,这个宏(可能还有其他类似于它的用于标志检查的宏)的效率会比只使用int t低得多吗?

不,它的效率不会降低。然而,这将是令人难以置信的、可怕的错误。求你了,永远不要。

哦,尤其是因为枚举的支持类型是未定义的,而且在某些编译器上,它们实际上可能被编译到小于int的大小。

来吧,可以重载enums:

E& operator ++ (E& x)
{
    x = E((int)x + 1);
    return x;
}

请参阅实际操作。

我敢肯定这违反了标准中严格的别名规则,而且它根本不适合C。你到底想做什么?它真的使SENSE值递增吗?

假设您正在尝试实现一个状态机,更好的方法是只拥有一个vector/数组查找表,并使用它来移动到一个新的状态。

如果您想假设枚举值是连续的,您确定不应该只使用int吗?