是if (c)
在C++中与if (c == 0)
相同吗?在C++中如何评估语句?
回答
它更像if (c != 0)
当然,!=
操作可以被重载,所以它不是完全准确的说,这些是完全平等的。
是的,如果将== 0
更改为!= 0
,它们是相同的。
呃,不,他们不是。 – Aistina 2009-09-25 19:21:11
if语句被*定义为接受任何非零值为真。所以是的,它是一样的。 – 2009-09-25 19:57:17
我会打破这一个包...“if (c)
”是最接近“if (((bool)c) == true)
”。对于整数类型,这意味着“if (c != 0)
”。正如其他人指出的那样,超载operator !=
可能会造成一些奇怪的现象,但是如果我错了,也可以重载“operator bool()
”。
这个问题最初是用C标记的,因此上面的答案,因为C中没有bool。 – 2009-09-25 19:44:10
if(static_cast
C99有Bool ... – rlbond 2009-09-25 22:54:40
这仅适用于数值。如果c是类,必须有重载操作,其不转换布尔值,如在这里:
#include <stdio.h>
class c_type
{
public:
operator bool()
{
return true;
}
};
int main()
{
c_type c;
if (c) printf("true");
if (!c) printf ("false");
}
如果c是一个指针或数值,
if(c)
相当于
if(c != 0)
如果c是一个布尔(bool类型[只有C++]), (编辑:或用户定义的类型与操作布尔()的过载)
if(c)
相当于
if(c == true)
如果c是也不指针或数字值既不是布尔值,
if(c)
不会编译。
它是一个用户自定义的类型,可以像D. Shawley和galets一样实现'operator bool()',这样它就可以很好地编译。 – Troubadour 2009-09-25 20:39:39
确切的说,我把它加到解释 – 2009-09-25 22:49:13
如果c
是一个指针,则测试
if (c)
是不太一样
if (c != 0)
后者是c
一个简单的检查针对0
(空)指针而前者实际上是检查c
是否指向有效对象的指令。通常编译器会生成相同的代码。
不,它不是......它们在指针的情况下意味着完全相同:if(c!= NULL) – Massa 2009-09-25 22:38:06
编译和/或运行时没有办法知道对象在C或C++中是否有效。 你可以这样写: “X * c =(X *)1;” 然后c几乎可以肯定指向一个无效的对象。并且 “if(c)”将成立。 – 2009-09-26 04:47:21
@Andrew:我怀疑你可以证明你的陈述证明没有办法检查对象是否有效。当然,编译器需要很多努力来生成运行时代码来检查,这就是为什么编译器不会打扰并生成相同的代码,即针对空指针进行测试。这就是为什么你的例子不能在(可能)所有当前编译器上产生错误结果的原因。 – Troubadour 2009-09-26 08:06:23
- 1. 如何在freemarker中评估语句?
- 2. 评估在JavaScript语句
- 3. 评估&&和||在if语句
- 4. Objective C的条件语句评估
- 5. MongoDB如何评估多个$或语句?
- 6. int如何评估为布尔语句?
- 7. PHP如何评估复合if语句?
- 8. 以下JavaScript语句如何评估?
- 9. JavaScript如何评估语句表达式?
- 10. 如何评估布尔语句
- 11. 如何评估这个if语句
- 12. If语句短路 - 如何评估
- 13. 布尔语句不在javascript中评估
- 14. AS:if语句评估错误
- 15. 没有评估case语句
- 16. 如何使用树C++来评估布尔语句
- 17. 如果语句评估错误
- 18. 如果没有正确评估语句
- 19. 评估在switch语句中的表达式C#
- 20. 在C#中评估sql语句的最佳方法是什么?
- 21. randint()如何在if和else语句中评估?
- 22. 如何在一个语句中评估两个函数?
- 23. 评估SSRS中两列的iif语句
- 24. Haskell中的语句评估器跟踪
- 25. SQL 2000:在UPDATE语句和评估
- 26. 如何评估R中的if语句中的NA值?
- 27. 为什么Visual C#中的if语句未被正确评估?
- 28. 评估if语句中的单个字符:C++
- 29. 如何懒惰评估单行if-else python语句中的值?
- 30. 如何评估If语句中的枚举?
请记住,0并不总是意味着同样的事情。它可以是空指针常量或整数零。 – 2009-09-25 19:37:06
难道你不是指“如果(c)与C++中的if(c!= 0)一样吗?” ? – 2009-09-25 21:10:50
是特定类型的变量c吗? – 2009-09-25 21:15:48