首页 > 解决方案 > 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具有不同的值吗?

标签: c++enums

解决方案


由于使用了多字符常量,您的代码可能(根据观察到的行为,不能保证总是如此)相当于:

enum class Status: char {
    test1 = '1',
    test2 = '0',
    test3
};

由于test3未指定 的值,编译器只是将其设置为比前一个值大 1,在这种情况下它将使用'1'. 无法保证具有未指定值的枚举元素将具有唯一值。

有关更多详细信息,请参阅文档


推荐阅读