是否可以为枚举定义运算符tilde ~
?例如,我的示例中包含enum State,我希望能够编写result &= ~STATE_FAIL;
。
我做了这样的事情:
#include <iostream>
enum State
{
STATE_OK = 0x0,
STATE_FAIL = 0x1,
STATE_LOW = 0x2,
STATE_HIGH = 0x4
};
State & operator|=(State & a, const State b)
{
a = static_cast<State>(static_cast<int>(a) | static_cast<int>(b));
return a;
}
State & operator&=(State & a, const State b)
{
a = static_cast<State>(static_cast<int>(a) & static_cast<int>(b));
return a;
}
State & operator~(State& a)
{
a = static_cast<State>( ~static_cast<int>(a));
return a;
}
int main()
{
State result = STATE_OK;
result |= STATE_FAIL; // ok
result &= STATE_FAIL; // ok
result &= ~STATE_FAIL; // fail
return 0;
}
我收到以下错误:
在功能
int main()
中:第35行:错误:转换无效 由于-Wfatal-errors,int
到State
编译终止。
答案 0 :(得分:3)
您获得的错误是由于将参数作为非const引用(不能绑定到临时表,STATE_FAIL
表达式)引起的。
您的operator~
实施中也出现了问题:例如:您的operator~
修改了~
的常规常规行为参数,如here所示。
这应该以预期的方式工作,即它不会修改其参数,只返回操作的结果:
State operator~(const State a)
{
return static_cast<State>(~static_cast<int>(a));
}