下面的代码:
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)。
1条答案
按热度按时间juud5qan1#
取自Scoped enumerations:
虽然static_cast可以用来获得枚举数的数值,但是从一个有作用域的枚举数的值到整型类型之间 * 没有隐式转换 *。
因此,由于增加了类型安全性,我将坚持使用
enum class
和static_cast
,除非您有令人信服的理由不这样做。