8

可能重复:
C++ 代码中的双重否定

据我所知,没有 C/C++ 书籍教程或手册提到这种技术。可能因为只是一件小事,不值一提。

我使用它是因为 C/C++ 将 bool 类型与 int、long、pointer、double 等...混合在一起。需要将非布尔值转换为布尔值是很常见的。使用 (bool)value 这样做是不安全的,所以我习惯!!这样做。

例子:

bool bValue = !!otherValue;
4

3 回答 3

19

很好,任何 C 或 C++ 程序员都应该识别它,但我更喜欢更明确的东西

(x != 0)
于 2012-05-02T00:11:40.027 回答
10

我认为!!与其他一些选择相比非常清楚,例如:

if (foo)
  bar = 1;
else
  bar = 0;

或者bar = foo ? 1 : 0;

由于!!只做一件事,我觉得它非常明确。

于 2012-05-02T00:15:12.443 回答
5

在这种确切的情况下:

bool bValue = !!otherValue;

你不需要写!!。没有它们它会正常工作:

bool bValue = otherValue;

我认为在大多数情况下隐式转换会很好。

于 2012-05-02T00:11:16.963 回答