c++ 枚举类XX:uint8_t与枚举XX:uint8_t:按位运算符and编译错误

kxe2p93d  于 2023-03-14  发布在  其他
关注(0)|答案(1)|浏览(254)

下面的代码:

enum class MouseState : uint8_t
{
    kLeft = 0x01,
    kRight = 0x02,
    kMiddle = 0x04,
};

uint8_t mouseState { 0 };

if ((mouseState & MouseState::kLeft) != 0) {
    std::cerr << "okay\n";
}

当我编译时,我得到了以下错误:

error: invalid operands to binary expression ('uint8_t' (aka 'unsigned char') and 'MouseState')
                        if ((mouseState & MouseState::kLeft) != 0) {
                             ~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~

但如果我使用(其中关键字class被删除):

enum MouseState : uint8_t
{
   ...
};

它编译的很好。你能解释一下为什么吗?(使用c++20和clang)。

juud5qan

juud5qan1#

取自Scoped enumerations
虽然static_cast可以用来获得枚举数的数值,但是从一个有作用域的枚举数的值到整型类型之间 * 没有隐式转换 *。
因此,由于增加了类型安全性,我将坚持使用enum classstatic_cast,除非您有令人信服的理由不这样做。

相关问题