双重否定检查非NULL
double negation to check against not NULL
我一直看到有人写这样的代码
SomeType c=....
if(!!c)
{
....
}
在什么情况下,它与
有什么不同?if (c)
{
.....
}
这种做法起源于C语言。在C语言有布尔类型之前
当c
= 0
时,!!c
= 0
。
当c
为任意值时,!!c
始终为1
。
将c
转换为一个真正的双状态布尔值。测试像( !!bool1 == !!bool2 )
或( !!bool3 == TRUE )
这样的表达式将得到预期的结果,即使这些值是"true"的不同位表示。
我发现在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;
相关文章:
- 检查字符串是否"null" C++
- C++,检查当我无法使用 NULL/0 时是否初始化了变量
- 类返回对象类型,但如何返回和检查 null
- C++如何将结构数组初始化为null,然后在while循环中检查该数组的元素是否为null
- 我可以根据null或特定类型的值检查引用吗
- 如何避免对具有组合关系的Object进行null检查
- EXC_BAD_ACCESS当我尝试检查 NULL 时
- 从多个来源检查NULL:共享_ptr vs double指针
- boost :: asio :: io_service检查是否为null
- 我如何检查该点动态分配的单指针是否为null
- 检查指针是否为null,然后在同一if语句中取消引用它,这样安全吗
- 为什么strlen()比手动循环检查以null结尾的字符快20倍
- NULL /空字符串检查:CPU开销
- 奇怪的NullReferenceException,尽管进行了null检查
- C++ - 检查指针是否指向有效内存(此处不能使用 NULL 检查)
- 智能指针:通过引用设置、重置、设置null、null检查或重置检查
- 删除惰性初始化后的null检查
- 为什么在NULL检查之后要在指针上调用递归函数?
- 在qt中NULL检查整数
- 是否有可能制作一个具有NULL检查的通用c++函数指针包装器?