我应该在哪里声明一个涉及多次实例化的类的枚举类

Where should I declare an enum class that concerns a class instantiated many times?

本文关键字:实例化 枚举 一个 声明 在哪里 我应该      更新时间:2023-10-16

我有一个包含颜色属性的类,我想使用枚举来处理它。由于在运行时我的程序可能会创建此类的数千个实例,因此声明枚举以优化内存使用的最佳位置在哪里?

目前,我的类声明如下所示:

class Node
{
public :
//constructors, methods, etc...
enum class Color : char{WHITE, GREY, RED, GREEN}
protected :
//Some private attributes
Color _color = Color::WHITE;
};

我知道这是一种可以接受的方法,我的问题是:当我得到这个类的 100k 个实例时,它会降低性能吗?

与任何数据类型一样,枚举本身不会占用对象中的存储空间,而是存储的枚举实例。(关于这一点,enumenum class之间没有区别。因此,将枚举移出类在这方面没有任何区别。

因此,在您的情况下,color_成员会占用存储空间。如果有些子类不需要它,你可能要重新考虑你的类设计。否则,你没事!

我猜你关心的是enum classenum声明中的class

enum class和旧式enum将生成完全相同的代码,并在编译器的"后端"中表现完全相同。区别发生在编译器的语义分析(类型检查)中(与"传统"enum类型相比,检查更严格,因此您无法执行int x = WHITE;enum { A, B }; Color c = A;)。