是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