在C++中,如何测试与"|"结合的几个标志之一 在一个论点?

Rob*_*ert 3 c++ arguments function

我有下一个代码:

int main()
{
 OwnSelect(23, FD_READ | FD_WRITE); // <---- Several arguments as one
 return 0;
}

int OwnSelect(SOCKET s, long lNetworkEvents)
{
 // How can i check that FD_READ has been passed?
 if(lNetworkEvents == FD_READ)
 {
  // never here
 }
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果已经使用FD_READ传递了另一个FD,我如何检查FD_READ是否已通过.谢谢!

nie*_*lsj 8

好像你在这里错过了一些基本的位操作.您正在对FD_READ和FD_WRITE(| =按位OR)执行OR运算,从而将两个值指示的位设置为参数.要检查是否已传递FD_READ,您需要使用FD_READ AND lNetworkEvents并检查结果是否等于FD_READ,如下所示:

if (FD_READ == (lNetworkEvents & FD_READ)) { ... }

这当然假设FD_READ和FD_WRITE是意图以这种方式使用的值(即通常不具有重叠位).

编辑:修复,wabepper绝对正确:)哎呀!