c++ - 数组索引时的枚举类性能

标签 c++ performance c++11 enums

我能否期望在这个 . .

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/

相关文章:

c++ - 将 lambda 表达式转换为函数指针

c++ - Mac OSX 下 Eclipse CDT 与 Qt 交叉编译

c++ - 是否有相当于 _aligned_realloc 的 linux

windows - 与 GUI 应用程序相比,相同的代码作为 Windows 服务运行得更慢

c++ - std::copy 从 vector 的位置到 vector 的位置

mysql - 使用 Wt::Dbo 导致 MySQL 准备语句泄漏

c++ - 如何编写漂亮的 C++ 注释的示例

performance - 为什么 docker build 这么慢

javascript - 移动元素的最佳方式(性能方面)

c++ - 将结构附加到 vector <uint8_t>