gpt4 book ai didi

c++ - 如何将 C++11 枚举类用于标志

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:09:32 26 4
gpt4 key购买 nike

假设我有这样一个类:

enum class Flags : char
{
FLAG_1 = 1;
FLAG_2 = 2;
FLAG_3 = 4;
FLAG_4 = 8;
};

例如,现在我可以拥有一个具有类型标志并分配值 7 的变量吗?我可以这样做吗:

Flags f = Flags::FLAG_1 | Flags::FLAG_2 | Flags::FLAG_3;

Flags f = 7;

出现这个问题是因为在枚举中我没有为 7 定义值。

最佳答案

您需要编写自己的重载operator|(并且可能是operator& 等)。

Flags operator|(Flags lhs, Flags rhs) 
{
return static_cast<Flags>(static_cast<char>(lhs) | static_cast<char>(rhs));
}

只要值在枚举值的范围内(否则为 UB;[expr.static.cast]/p10),将整数转换为枚举类型(有范围或无范围)是明确定义的。对于具有固定基础类型的枚举(这包括所有作用域枚举;[dcl.enum]/p5),枚举值的范围与基础类型的值范围([dcl.enum]/p8)相同。如果底层类型不固定,则规则会更棘手 - 所以不要这样做 :)

关于c++ - 如何将 C++11 枚举类用于标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32578638/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com