0

如果条件,我无法理解以下内容。如果有人知道,请帮助我理解它。

foreach(QNetworkInterface netInterface, QNetworkInterface::allInterfaces())
{
     if(!(netInterface.flags() & netInterface.IsLoopBack))
     {
          qDebug()<<netInterface.humanReadableName();
          qDebug()<<netInterface.hardwareAddress();
     }
}
4

1 回答 1

1

首先让我们从简单的部分开始:逻辑否定运算符!

对于任何逻辑操作,都会!反转该操作的状态。如此,如此。!true_false!falsetrue


netInterface.IsLoopBack是单个位的值。

netInterface.flags()返回一组位。

netInterface.flags() & netInterface.IsLoopBack检查特定位netInterface.IsLoopBack是否在 . 返回的集合中netInterface.flags()


现在把它放在一起,结果netInterface.flags() & netInterface.IsLoopBack是一个整数值。如果该位在集合中,则它是非零的。

在 C++ 中,所有非零整数值都被认为是“真”。

对这个值应用!运算符会反转条件。

所以条件!(netInterface.flags() & netInterface.IsLoopBack)true该位不在集合中。


最后一点上下文:循环遍历本地系统上的所有网络接口。

如果接口不是环回接口(地址127.0.0.1是环回地址),则打印接口的名称和地址。


附录:通过为操作员阅读一些不错的 C++ 书籍,所有这些都可以相对容易地弄清楚。并阅读 和 的QNetworkInterface::flags()文档enum QNetworkInterface::InterfaceFlag

于 2021-11-24T18:46:03.567 回答