c++ - 不断的“旗帜”被认为是好的风格吗?(c++)
问题描述
我目前正在一个图书馆工作,我想知道拥有全大写常量是否被认为是一种很好的风格,例如:
constexpr int ONLY_LOWERCASE = 1;
constexpr int ONLY_UPPERCASE = 2;
等等。我计划使用它来让库用户控制函数的行为,例如:
doSomeThing(var, ONLY_UPPERCASE);+
谢谢
解决方案
似乎您正在使用整数结构来存储布尔数据。出于内存使用的原因,它可能被认为是为此目的使用布尔结构的更好方法。
存档此目标的一种方法是使用enum
或enum class
继承自bool
:
enum class string_case : bool {
ONLY_LOWERCASE,
ONLY_UPPERCASE
}
这样,您将使用单个字节来指示您想要的任何内容,而不是示例中的 8 个字节。
使用示例:
doSomeThing(var, string_case::ONLY_UPPERCASE);
编辑
如果您有超过 2 个标志,您仍然可以使用enum
(只是没有继承自bool
):
enum class string_case {
ONLY_LOWERCASE = 1,
ONLY_UPPERCASE = 2,
FLAG_3 = 3,
FLAG_4 = 4
};
即便如此,仅使用 4 个字节(而不是4(bytes) * flags_count
)。
另一种方法,如果多个标志可以一起打开(并且您不想在enum
计算中使用位),您可以使用结构:
struct options {
bool option_1: 1;
bool option_2: 1;
bool option_3: 1;
bool option_4: 1;
};
通过这种方式,您将只使用存储这些位所需的字节数。
推荐阅读
- javascript - 扩展运算符在 Alexa 中抛出意外的令牌错误
- sql - Oracle Query如何计算具有值的列范围
- python - 从三个x,y点计算角度的更多pythonic方法返回0-360度,“向上”为0?
- javascript - 如何使用 javascript 选择 section 标签内的所有 div?
- google-apps-script - 添加脚本后撤消功能不起作用
- go - 将状态存储在 golang 二进制文件中
- excel - 如何根据特定标准将特定值从一张纸传递到另一张纸
- java - 如何从命令行创建具有所有模块依赖项的 javaFX 应用程序的 jar 文件?
- javascript - Material Web 组件与 Material 组件 Web
- python - 根据 Pandas 中的多个条件过滤行