我能否期望在这个 . .
enum class myEnum {A,B,C};
myArray[(int)myEnum::A] = 123;
和这个比?
enum myEnum {A,B,C};
myArray[A] = 123;
为了类型安全,我倾向于使用新型枚举类,但不想以牺牲性能为代价。
最佳答案
这取决于用作索引的枚举值是在编译时已知还是在变量中传递。
即 myArray[(int)myEnum::A]
不会受到任何惩罚,但 myArray[(int)e]
可能会受到惩罚,具体取决于e
(即,可能需要“扩展”它)。
另一方面,一个简单的扩展是一个微不足道的操作,不太可能永远显示为性能问题:分支预测(在条件中)和缓存在大多数应用程序中更为重要(对于低级) ,在更高层次上,算法很重要。
注意:为了避免运行时场景中的扩展问题,您可以将 myEnum
的基类型定义为编译器算法所期望的自然类型,我相信 ptrdiff_t
在这里最合适。虽然这是一个很大的整数。
关于c++ - 数组索引时的枚举类性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13977431/