【问题标题】:Logical !! versus nothing逻辑!!与无
【发布时间】:2014-10-07 10:06:19
【问题描述】:

我刚刚在微软的 guiddef.h 头文件中找到了这个:

__inline bool operator==(REFGUID guidOne, REFGUID guidOther)
{
    return !!IsEqualGUID(guidOne,guidOther);
}

!! 有什么意义吗,还是某个开发者那天觉得很可爱?

【问题讨论】:

标签: c++ c com


【解决方案1】:

它关闭了转换为布尔值的 Visual C++ 愚蠢性能警告。

【讨论】:

  • 是的,警告是 C4800。他们也可以使用return IsEqualGUID(guidOne, guidOther) != 0;,这实际上也是如此。
  • @sharptooth:关于为什么!= 0 不是通用约定,它有不同的优先级和位置,不适合预先的视觉识别。因此,他们有充分的理由不能很好地做到这一点。从技术上讲,他们可以做到这一点,是的,但不是那么好。 ;-)
  • 鉴于 C++ 标准类型 bool 的语义,!!!=0 都不是必需的;转换将隐式完成,其行为方式与!! 相同。代码,或者至少是成语,可能可以追溯到 C++ 将 bool 作为内置类型之前,或者至少在它像现代 C++ 中那样表现之前。到bool 的显式转换(使用最合适的类型转换)可能会更清晰,也可能会抑制警告。
  • @KeithThompson:不,其他方式不会抑制警告。
  • 显式转换不会抑制转换警告? 叹息
【解决方案2】:

在这种特殊情况下,Alf 可能是对的。

否则,对于逻辑运算,将整数值标准化为 1(如果它们以非零开头)或 0(如果它们以零开头)是常见的习惯用法。

【讨论】:

    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 2012-09-30
    • 1970-01-01
    • 2017-11-05
    • 2015-11-10
    • 2013-03-15
    相关资源
    最近更新 更多