我很难理解为什么在枚举中使用按位运算 然后在代码中。 为什么不只使用数字或 bool 值 例如:
enum
{
RS_BLEND = (1 << 0),
RS_BLEND_FUNC = (1 << 1),
RS_CULL_FACE = (1 << 2),
RS_DEPTH_TEST = (1 << 3),
RS_DEPTH_WRITE = (1 << 4),
RS_DEPTH_FUNC = (1 << 5),
RS_CULL_FACE_SIDE = (1 << 6),
// RS_STENCIL_TEST = (1 << 7),
// RS_STENCIL_WRITE = (1 << 8),
// RS_STENCIL_FUNC = (1 << 9),
// RS_STENCIL_OP = (1 << 10),
RS_FRONT_FACE = (1 << 11),
RS_ALL_ONES = 0xFFFFFFFF,
};
void RenderState::StateBlock::setCullFace(bool enabled)
{
_cullFaceEnabled = enabled;
if (!enabled)
{
_bits &= ~RS_CULL_FACE;
}
else
{
_bits |= RS_CULL_FACE;
}
}
这不是关键软件或嵌入式软件。
最佳答案
使用位而不是 bool 值的优点是您可以直接操作值集。例如定义:
const int FILLED = (1 << 0);
const int STROKED = (1 << 1);
const int SHADOW = (1 << 2);
const int BLINK = (1 << 3);
你可以让一个函数接受draw_mode
参数并像这样调用它
draw_symbol(FILLED | SHADOW | BLINK, "X");
即直接传递值的子集。
使用容器而不是单个整数参数将需要更多代码来编写和读取。它的效率也会较低,但在某些情况下这不是最重要的一点。
关于c++ - 为什么在 C++ 中使用按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33840843/