可能是重复问题:
C++代码中的双重否定
据我所知,没有任何C/C++教程、手册或者书籍提到过这个技巧。也许是因为这只是一件微不足道的小事,不值得一提。
我使用它是因为C/C++将bool类型与int、long、指针、double等混合在一起。非常常见的情况就是需要将非bool转换为bool。使用(bool)value这样做是不安全的,因此我使用!!
来完成。
例如:
bool bValue = !!otherValue;
可能是重复问题:
C++代码中的双重否定
据我所知,没有任何C/C++教程、手册或者书籍提到过这个技巧。也许是因为这只是一件微不足道的小事,不值得一提。
我使用它是因为C/C++将bool类型与int、long、指针、double等混合在一起。非常常见的情况就是需要将非bool转换为bool。使用(bool)value这样做是不安全的,因此我使用!!
来完成。
例如:
bool bValue = !!otherValue;
没问题,任何C或C++程序员都应该能够认识它,但我更喜欢一些更加明确的东西,比如:
(x != 0)
我认为 !!
相对于其他一些选择来说已经足够明确了,例如:
if (foo)
bar = 1;
else
bar = 0;
或者 bar = foo ? 1 : 0;
由于 !!
只做一件事情,我发现它非常清晰明了。
bool
或隐式转换),但我在C中经常使用它。在我看来,!!x
是如此明显,以至于我看到的是一个!!
运算符,而不仅仅是两个!
。 - Robᵩ-->
是一个独立的运算符... ;-) - R.. GitHub STOP HELPING ICEbool bValue = !!otherValue;
你不需要写!!
。没有它们也能正常工作:
bool bValue = otherValue;
我认为在大多数情况下隐式转换会更好。
static_cast<bool>(value)
。 - Inverse