20
A
回答
29
的條件被認爲是「真」,如果它的計算結果爲大於0 *的任何其他。 ""
是一個包含單個\0
字符的常量字符數組。爲了評估這種情況,編譯器將數組「衰減」爲const char*
。由於const char[1]
不在地址0處,因此指針非零並且條件滿足。
*更確切地說,如果計算結果爲true
後被隱式轉換爲bool
。對於簡單類型,這與非零值相同,但對於類類型,您必須考慮是否定義了operator bool()
以及它的作用。
從C++ 11規範草案§4.12:
4.12布爾轉化[conv.bool]
算術,無作用域枚舉,指針,或指針的prvalue到成員類型可以 轉換到布爾類型的前值。零值,空指針值, 或空成員指針值被轉換爲false;任何其他值爲 轉換爲true。 std :: nullptr_t類型的前值可以被轉換爲 爲bool類型的前值;結果值是錯誤的。
3
因爲""
衰減到char const*
和是否或何時轉換成布爾所有非空指針評估爲true
。
0
你可能會從像PHP,這裏的檢查處理不同的語來:
php -r 'echo "X";if ("") echo "Y";'
這將打印的X,而不是在Y,因爲空字符串沒有價值。如其他人指出的那樣,在C++中它是一個非空指針,因此被評估爲true。
相關問題
- 1. 爲什麼[-n $ var]在空字符串上爲true?
- 2. 爲什麼字節[]被轉換爲字符串JSON視圖
- 3. Javascript:爲什麼一個數字被視爲一個字符串?
- 4. 爲什麼字符串被稱爲「字符串」?
- 5. 爲什麼字符串可以爲空?
- 6. JQuery.each將字符串文字轉換爲字符串。爲什麼?
- 7. 爲什麼字符串被指定爲空(C#)的String.Empty?
- 8. 爲什麼c字符串被釋放?
- 9. 爲什麼DB2將空字符串視爲null?
- 10. 爲什麼這個ASCII字符輸出爲空字符串(VB.NET)?
- 11. PHP:什麼是空()的替代,其中字符串「0」不被視爲空?
- 12. 空字符串+變量:爲什麼?
- 13. 爲什麼[] + []返回空字符串?
- 14. 爲什麼subprocess.popen返回空字符串
- 15. 爲什麼字符串總是空的?
- 16. 爲什麼regex.Match返回空字符串?
- 17. 爲什麼undef變成空字符串?
- 18. 爲什麼連接到非空字符串的空字符串評估爲null?
- 19. 爲什麼文字HTML字符串被附加到DOM?
- 20. 爲什麼只有字符串視圖?
- 21. 爲什麼每個字符串都有空字符串?
- 22. 爲什麼我的命令事件字符串字段被檢索爲空
- 23. 爲什麼json_decode($ data,TRUE)將數組轉換爲字符串?
- 24. 爲什麼string.empty()在字符串包含值時計算爲true?
- 25. 爲什麼GORM/Hibernate將字符串參數轉換爲TRUE?
- 26. makefile,爲什麼字符串中的空格被合併?
- 27. 字符串重載變量被視爲定義不管什麼
- 28. 爲什麼字符串[]被識別爲只是一個字符串
- 29. Aspose.Pdf:爲什麼中文字符「空白」?
- 30. 什麼時候Request.Form [「name」]爲空,何時爲空字符串?
因爲'「」'是非'NULL'指針。 – Jesper
''「'當表達式計算爲非空地址時,boolean eval-speak中的非null表示非false。 – WhozCraig
其實我沒有看到這個應該這麼低估的原因。這個問題是好的,這是關鍵,代碼顯示作者只需要一個他不知道的答案。爲什麼這麼討厭? –