拥有一个包含很多(很多!)布尔字段的C ++类是否可以?

时间:2014-10-14 18:57:35

标签: c++ structure icc

我有一个C ++类,其中包含许多bool字段,表示系统的不同方面。这个类是另一个被复制的类的一部分(很多!)。

我的问题:

  • 让班级有很多布尔可以吗?或者我应该手动将其压缩成更大的数据类型吗?
  • 鉴于该类被复制很多,定义我自己的复制/移动构造函数有什么好处吗?
  • 或者我应该不管它并让编译器对此进行优化?

1 个答案:

答案 0 :(得分:1)

首先,通常可以,假设您的类不用于实例化大量对象。在后一种情况下,使用整个bool来表示布尔标志可能会被证明太浪费了。但是你在谈论代表“系统的不同方面”的标志,这听起来像是不会产生大量实例的东西。

其次,也许您应该考虑将这些字段转换为由枚举索引的bool数组。例如,而不是

bool has_printer;
bool needs_optimizations;

使用

enum {
  OPT_HAS_PRINTER,
  OPT_NEEDS_OPTIMIZATION,

  OPT_COUNT_
};

bool options[OPT_COUNT_];

这将使您的字段集合“运行时可迭代”,这可能会简化许多不关心每个字段的应用程序特定含义的处理代码(如复制代码,读写代码等)