gpt4 book ai didi

c++ - 您可以在不强制转换的情况下对枚举类使用按位运算符吗?

转载 作者:行者123 更新时间:2023-12-04 15:14:58 30 4
gpt4 key购买 nike

我喜欢使用枚举类,但有时我将它们用作标志,如果我想使用按位运算符,我必须不断地转换为 int。有没有办法不用类型转换就可以做到这一点?我认为您不能为它们定义运算符?

如果我有采用枚举类的函数,我必须这样做吗?

enum class Flags { FLAG1, FLAG2, FLAG3};

void setFlags(Flags flags){}

int main()
{
setFlags((Flags)((int)Flags::FLAG1 | (int)Flags::FLAG2 | (int)Flags::FLAG3));
}

最佳答案

enum 之后的 class 指定枚举是强类型的,并且它的枚举数是有范围的。请注意,enum class 默认仅定义赋值、初始化和比较。然而,枚举是用户定义的类型,因此您可以为其定义运算符。


如果您不想显式限定枚举器名称并希望枚举器值是整数(不需要显式转换),您可以删除enum class 获取“普通”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;
}

引用资料:

  • Bjarne Stroustrup 的 C++ 之旅第二版

关于c++ - 您可以在不强制转换的情况下对枚举类使用按位运算符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64494432/

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