这是不是效率低下
Is this inefficient?
扩展这个问题,我想使用我的枚举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
吗?
相关文章:
- 在调用接收数组的方法时,模板化数组大小是不是一种糟糕的做法
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 在枚举类型上使用std::max是不是一种糟糕的做法
- std::元组大小,是不是错过了优化?
- 拥有相同方法的静态和非静态版本是不是设计不好
- 他是不是很贪婪
- SDL2:移动所有东西而不是使用视图端口是不是很糟糕
- OOP-我是不是把事情复杂化了
- 在DLL中分配内存并将其指针提供给客户端应用程序,这是不是一种糟糕的做法
- 在C++代码中使用C风格的注释是不是一种糟糕的做法
- 如果我在C++中使用堆,我是不是做错了什么
- 这个简单但有用的模式是不是太简单了,不可能成为一个真正的模式
- 在C++中,通过引用传递常量布尔值是不是不好的
- 在main.cpp中而不是在头文件中定义函数是不是一种糟糕的做法
- 既然智能指针已经存在,那么使用C型指针是不是已经过时了
- LNK2019:未解析的外部符号;我是不是忘了
- 重载一个函数同时获取指针或引用是不是一种糟糕的做法
- 是不是比较意味着一个分支
- 这是不是效率低下
- 这个素数生成器是不是效率低下的C++