是否可以为枚举定义运算符 ~
?例如,我的示例中有枚举状态,我希望能够编写 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;
}
我收到以下错误:
In function
int main()
: Line 35: error: invalid conversion fromint
toState
compilation terminated due to -Wfatal-errors.
最佳答案
您遇到的错误是由于将参数作为非常量引用(无法绑定(bind)到临时对象,表达式 STATE_FAIL
是)引起的。
您的 operator~
实现也有问题:例如您的 operator~
修改了参数,这不是 ~
的常规行为,如图所示 here .
这应该以预期的方式工作,即它不修改它的参数,只返回操作的结果:
State operator~(const State a)
{
return static_cast<State>(~static_cast<int>(a));
}
关于c++ - 为枚举重载代字号 "~"运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42282500/