c++ - 在 C++ 中,如何在一个参数中测试与 "|"组合的多个标志之一?

标签 c++ function arguments

我有下一个代码:

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;
}

无论另一个 FD 是否已通过 FD_READ,我如何检查 FD_READ 是否已通过。 谢谢!

最佳答案

似乎您在这里错过了一些基本的位操作。您对 FD_READ 和 FD_WRITE 进行或运算(| = 按位或),从而将两个值指示的位设置为参数。要检查 FD_READ 是否已通过,您需要将 AND lNetworkEvents 与 FD_READ 并检查结果是否等于 FD_READ,如下所示:

如果 (FD_READ == (lNetworkEvents & FD_READ)) { ... }

这当然假设 FD_READ 和 FD_WRITE 是旨在以这种方式使用的值(即通常没有重叠位)。

编辑:已修复,wabepper 绝对正确 :) 糟糕!

关于c++ - 在 C++ 中,如何在一个参数中测试与 "|"组合的多个标志之一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11259846/

相关文章:

c++ - 通过 CMake 添加外部库(例如 Eigen)

c++ - Win32 线程意外退出

c++ - "Cannot convert parameter 1 from double to float"虽然没有改变参数

c - 将数组传递给已扫描的函数

sql-server - "Adding a value to a ' 日期时间 ' column caused an overflow."

c - sizeof 运算符在 C 中接受哪些参数?

python - 为什么这个函数装饰器失败了?

c++ - 根据 vim 中的语法更改折叠级别

c++ - 没有匹配函数调用 'AnimationSet::AnimationSet()'

C++ 将双参数解析为字符串?