2
A
回答
3
这种做法从C语言起源。在C之前有一个布尔类型。
当c
是0
,!!c
也是0
。
当c
是任何其他值,!!c
总是1
。
这会将c
转换为真实的2态布尔值。像(!!bool1 == !!bool2)
或这样的测试表达式将给出预期的结果,即使这些值是不同的按位表示“真”。
+0
C++中有必要吗? –
+1
@NeilKirk假设'operator!'没有被重载以对给定类型做一些奇怪的事情,这是没有必要的。它在功能上等同于任何对“bool”的演员。 –
0
我发现下面生成在Microsoft Visual C警告++:
int i = GetSomeValue();
bool b = (bool) i;
warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
我的意图是明确的,但是编译器坚持生成警告。如果我使用双重否定,则警告消失。
int i = GetSomeValue();
bool b = !!i;
相关问题
- 1. SqlBulkCopy插入null而不是双重
- 2. Java null双重对象格式
- 3. 不存在SQL双重否定
- 4. 如何检查对象是否为null或不是== null
- 5. 双重否定sql查询
- 6. 我应该总是验证对象是否为NULL?
- 7. 是否为null对象?
- 8. 通行证,而不是= NULL
- 9. Ruby布尔双重否定约定
- 10. 如何证明类型级布尔的双重否定?
- 11. 是否可以使用symfony2的双重身份验证?
- 12. 验证mysql查询是否为NULL
- 13. 如何验证是否string.split()返回null
- 14. 双重锁定锁定模式:是否损坏?
- 15. ColdFusion中“双重锁定锁定”是否工作?
- 16. 双重锁定内存模型保证
- 17. (应该是)简单的双重验证
- 18. 返回长双而不是双重
- 19. 瞬态对象是否可以安全地进行双重检查锁定?
- 20. C++代码中的双重否定
- 21. 什么双重否定用C
- 22. agda中的双重否定插入
- 23. Javascript - 为什么使用双重否定
- 24. 嵌套查询和双重否定
- 25. 使用双重否定 - 为什么?
- 26. Apache + geoserver是否需要双重登录?
- 27. 是否允许类的“双重依赖”?
- 28. 双重逃逸是否可能对DB造成伤害?
- 29. 是否select(NULL,NULL,NULL,&timeout)等待给定的时间?
- 30. WebDriver /'null'不是对象
当'c'不是'bool'(至少有一个“true”或“false”值)。 – chris
[运算符重载](http://en.cppreference.com/w/cpp/language/operators)。 – BoBTFish
所以这意味着它和if(c == true)是一样的,它也可以将c转换为bool – KKKoo0