回答
轉換
char* p = "foobar";
在C++ 0X棄用在C++ 98/C++ 03,並已被移除(即,§4.2/ 2去除)。
因此,代碼是在C++ 0x中無效。
但是,MinGW g ++ 4.4.1仍然只發出警告,而不是錯誤。
C++ 98/C++ 03§4.2/ 2(在C++ 0X移除):
字符串文字(2.13.4),其不是一個寬字符串文字罐被轉換爲類型爲「指向char
」的右值;寬字符串文字可以轉換爲類型爲「指向wchar_t
的指針」的右值。無論哪種情況,結果都是指向數組的第一個元素的指針。只有在存在明確的適當的指針目標類型時纔會考慮這種轉換,而不是當一般需要將左值轉換爲右值時。 [注意:此轉換已被棄用。見附錄D.]爲了在重載分辨率(13.3.3.1.1)中進行排序,此轉換被認爲是一個數組到指針的轉換,然後是一個限定轉換(4.4)。 [示例:將轉換爲「指向const char
」的指針作爲數組到指針的轉換,然後指向「指向char
」作爲限定轉換。 ]
即使g ++ 4.4.5和'-std = C++ 0x'也只會發出警告。 –
所以§4.2/ 2最初是關於字符串文字轉換爲char *'的,我想呢?如果可以的話,將C++ 03標準中的段落包含在報價中,如果可能的話,會很酷:) – fredoverflow
@Fred:我在C++ 03中添加了段落。 @阿爾夫:我希望你可以。 – sbi
我相信這現在在C++ 0x非法。對於遺留代碼的這種轉換,C++ 03有一個特殊的警告,但是C++ 0x將其刪除,現在您違反了const正確性。
當然,我不知道是否有真正的編譯器已經刪除它,但他們將在他們的權利範圍內。
- 1. 如何將char分配給字符串?
- 2. 將字符分配給字符串變量後刪除char *
- 3. 「hello world」字符串文字可以分配給char *類型嗎?
- 4. 將字符串文字分配給char數組,字符串文字如何被複制到堆棧中?
- 5. 無法將字符串文字分配給字符數組
- 6. 將它分配給字符串變量後刪除Char *
- 7. 如何將十六進制字符串分配給char []變量?
- 8. 將動態分配的char *字符串複製到新的char *字符串中
- 9. 如何將字符串分配給TextBlock?
- 10. 將字符串分配給stack.top()
- 11. 將c_str()分配給字符串
- 12. 將字符串分配給NvAPI_UnicodeString
- 13. 將appSettings值分配給字符串
- 14. 將進程分配給字符串?
- 15. C++:將L「」字符串分配給WCHAR []?
- 16. 將對象分配給字符串
- 17. C編譯器在將字符串分配給字符數組時,稱「無法將char *轉換爲char」
- 18. 將字符串分配給另一個字符串
- 19. 將字符串變量分配給字符串數組
- 20. 將字符串的值分配給字符串數組
- 21. C++將字符串參數分配給一個字符串
- 22. 串字符被分配到一個char
- 23. java將next()分配給字符串或分解爲字符
- 24. 將unsigned char *賦給字符串C++
- 25. 爲什麼在將字符串文字分配給char變量時打印字符d?
- 26. 將文件中的字符串分配給字符串數組遇到困難
- 27. 分割字符串,並將其分配給字典
- 28. 將字符分配給C中的字符串#
- 29. 將直接字符串分配給C中的字符數組
- 30. 無法將字符分配給字符串變量
它繼續工作,並繼續是貧窮的風格。 –
GCC 4.6說「從字符串常量到char *的棄用轉換」。 –
好吧,它應該是'const char *',要更正確 –