C++ 是恒定的;旗帜;被认为是好的风格?(c+;+;)
我目前在一个库中工作,我想知道拥有所有caps常量是否被认为是一种好的样式,例如:C++ 是恒定的;旗帜;被认为是好的风格?(c+;+;),c++,oop,styles,c++17,C++,Oop,Styles,C++17,我目前在一个库中工作,我想知道拥有所有caps常量是否被认为是一种好的样式,例如: constexpr int ONLY_LOWERCASE = 1; constexpr int ONLY_UPPERCASE = 2; 等等。我计划使用它让库用户控制函数的行为,如: doSomeThing(var, ONLY_UPPERCASE);+ 谢谢看起来您正在使用整数结构来存储布尔数据。出于内存使用的原因,它可能被认为是一种更好的使用布尔结构的方法 存档此目标的一种方法是使用继承自bool的enum
constexpr int ONLY_LOWERCASE = 1;
constexpr int ONLY_UPPERCASE = 2;
等等。我计划使用它让库用户控制函数的行为,如:
doSomeThing(var, ONLY_UPPERCASE);+
谢谢看起来您正在使用整数结构来存储布尔数据。出于内存使用的原因,它可能被认为是一种更好的使用布尔结构的方法
存档此目标的一种方法是使用继承自
bool
的enum
或enum类
:
enum class string_case : bool {
ONLY_LOWERCASE,
ONLY_UPPERCASE
}
enum class string_case {
ONLY_LOWERCASE = 1,
ONLY_UPPERCASE = 2,
FLAG_3 = 3,
FLAG_4 = 4
};
这样,您将使用一个表示所需内容的单个字节,而不是示例中的8个字节
用法示例:
doSomeThing(var, string_case::ONLY_UPPERCASE);
编辑
如果您有两个以上的标志,您仍然可以使用enum
(只是不从bool
继承):
即使如此,只使用4个字节(而不是4(字节)*标志计数
)。另一种方法是,如果多个标志可以同时启用(并且您不想在
enum
计算中使用位),则可以使用结构:
struct options {
bool option_1: 1;
bool option_2: 1;
bool option_3: 1;
bool option_4: 1;
};
通过这种方式,您将只使用存储这些位所需的字节量。最好使用
enum
或enum class
。您可以组合您的标志吗?还是它们是独占的?啊,对不起,我忘了解释,我大约有15个这样的标志。