Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是恒定的;旗帜;被认为是好的风格?(c+;+;)_C++_Oop_Styles_C++17 - Fatal编程技术网

C++ 是恒定的;旗帜;被认为是好的风格?(c+;+;)

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

我目前在一个库中工作,我想知道拥有所有caps常量是否被认为是一种好的样式,例如:

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个这样的标志。