int我喜欢使用枚举类,但有时我将它们用作标志,如果我想使用按位运算符,我必须不断地进行转换。有没有办法在不铸造的情况下做到这一点?我认为您无法为它们定义运算符?
如果我有采用枚举类的函数,我必须这样做吗?
enum class Flags { FLAG1, FLAG2, FLAG3};
void setFlags(Flags flags){}
int main()
{
setFlags((Flags)((int)Flags::FLAG1 | (int)Flags::FLAG2 | (int)Flags::FLAG3));
}
Run Code Online (Sandbox Code Playgroud)
之后class的enum指定枚举是强类型的并且其枚举器是有作用域的。请注意,enum class默认情况下仅定义了赋值、初始化和比较。然而,枚举是用户定义的类型,因此,您可以为其定义运算符。
如果您不想显式限定枚举数名称并希望枚举数值ints(无需显式转换),则可以删除 fromclass以enum class获得 "plain" enum。枚举数被导出到周围范围以避免名称冲突,您可以用命名空间包装。
#include <iostream>
namespace Flags {
enum : int
{
bit_1 = 0x1,
bit_2 = 0x2
};
}
int main()
{
int num = 11;
if (num & Flags::bit_1)
std::cout << "lsb is on!\n";
else
std::cout << "lsb is off!\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
参考: