我应该在哪里声明一个涉及多次实例化的类的枚举类
Where should I declare an enum class that concerns a class instantiated many times?
我有一个包含颜色属性的类,我想使用枚举来处理它。由于在运行时我的程序可能会创建此类的数千个实例,因此声明枚举以优化内存使用的最佳位置在哪里?
目前,我的类声明如下所示:
class Node
{
public :
//constructors, methods, etc...
enum class Color : char{WHITE, GREY, RED, GREEN}
protected :
//Some private attributes
Color _color = Color::WHITE;
};
我知道这是一种可以接受的方法,我的问题是:当我得到这个类的 100k 个实例时,它会降低性能吗?
与任何数据类型一样,枚举本身不会占用对象中的存储空间,而是存储的枚举实例。(关于这一点,enum
和enum class
之间没有区别。因此,将枚举移出类在这方面没有任何区别。
因此,在您的情况下,color_
成员会占用存储空间。如果有些子类不需要它,你可能要重新考虑你的类设计。否则,你没事!
我猜你关心的是enum class
与enum
声明中的class
。
enum class
和旧式enum
将生成完全相同的代码,并在编译器的"后端"中表现完全相同。区别发生在编译器的语义分析(类型检查)中(与"传统"enum
类型相比,检查更严格,因此您无法执行int x = WHITE;
或enum { A, B }; Color c = A;
)。
相关文章:
- 使用 int 初始化枚举类
- 如何在不实例化派生类的情况下管理一组派生类枚举
- 带有constexpr std :: string_view vs用std :: string实例化枚举的枚举
- 初始化枚举类 (C++11) 类型的二维 std::数组
- 如何部分专用化枚举值的类模板?
- 使用 C++11 可变参数模板初始化枚举到字符串映射
- 如何在 c++ 中使用枚举参数实例化对象
- (取消)序列化枚举类
- 带有实例化模板的切换枚举的工厂
- 枚举器而不是用于类实例化的构造函数
- C 11枚举类实例化
- 通过显式转换函数初始化枚举类类型的静态constexpr类成员
- 使用枚举实例化模板
- 我应该在哪里声明一个涉及多次实例化的类的枚举类
- 值初始化枚举的行为
- 使用函数调用初始化枚举值
- 初始化枚举c++
- 编译器正在尝试从 int 初始化枚举类,而它没有
- 隐式实例化取决于作用域或非作用域枚举
- vc++函数模板实例化错误C2664当使用不同的枚举实参时