c++ - c++枚举类必须给所有成员一个值或没有值以确保唯一性?
问题描述
enum class Status: char {
test1 = '1',
test2 = '10',
test3
};
int main() {
Status test1 = Status::test1;
Status test2 = Status::test2;
Status test3 = Status::test3;
if (test1==test3) {
cout << "Enum same"<< endl;
}
if (static_cast<char>(test1) == static_cast<char>(test3)) {
cout << "value same" << endl;
}
}
这个片段实际上输出,
Enum same
value same
这意味着如果我将enum class
成员与 set 和 unset 混合,编译器不会尝试避免给出与其他成员相同的值?除了给每个成员一个值之外,还有其他方法可以确保每个成员enum class
具有不同的值吗?
解决方案
由于使用了多字符常量,您的代码可能(根据观察到的行为,不能保证总是如此)相当于:
enum class Status: char {
test1 = '1',
test2 = '0',
test3
};
由于test3
未指定 的值,编译器只是将其设置为比前一个值大 1,在这种情况下它将使用'1'
. 无法保证具有未指定值的枚举元素将具有唯一值。
有关更多详细信息,请参阅文档。
推荐阅读
- javascript - 如何使用带有 JSON 获取 API 响应 Javascript 的 if / else 语句
- swift - 当我将 UIWindow 添加为 rootController 时,它会拉伸我的 UIAlertController
- elasticsearch - 将角色与 Open Distro 和 Keycloak 集成
- python - 按文件查找 PyPi 包?
- c# - 如何从 appsettings.json 填充字典?
- r - 连续数据的千层面图
- python - 即使已安装也找不到 Python 模块
- sql-server - 需要 SQL 帮助中的 XML 输出
- beautifulsoup - 如何在div中提取文本“lower”
- python - 如何让我的 for 循环遍历列表 test_cases 中的每个数字?