回答
那麼,我錯了?爲什麼要編譯?
這是因爲編譯你的編譯器過於寬鬆,而你的編譯器過於寬鬆,因爲在C++ 03的隱式轉換,從一個字串char*
只有棄用,不是無效。
基本原理是與傳統C API向後兼容。每一段的C++ 03標準的4.2/2:
字符串文字(2.13.4),其不是一個寬字符串文字可以被轉換成類型的「指針
char
」右值;寬字符串文字可以轉換爲類型爲「指向wchar_t
的指針」的右值。在任一情況下, 結果是指向數組的第一個元素的指針。只有在存在明確適當的指針目標類型時纔會考慮此轉換,而不是在通常需要將左值轉換爲 右值時。 [注意:此轉換已被棄用。見附錄D.]
在C++ 11,然而,隱式轉換是非法的(上面的段落已經完全去除)。
我可以合法地取消引用和修改構造函數中的指針嗎?!
可以,但不能修改解除引用的對象。這樣做會是未定義的行爲,因爲該對象的類型是const
-qualified。
是的,我其實是訪問解除引用的對象。感謝你的回答! – ulidtko
@ulidtko:好的,很高興幫助。如果這回答你的問題,請考慮將它標記爲接受,當你被允許:) –
- 1. Android字符串初始化
- 2. 初始化「的字符串」
- 3. 字符串初始化
- 4. GPS初始化字符串?
- 5. 字符串初始化
- 6. 初始化字符串爲空與空字符串
- 7. 初始化字符*
- 8. 從字符串初始化單元
- 9. 初始化字符串使用指針
- 10. C中的字符串初始化
- 11. 字符串初始化和性能
- 12. LLVM IR字符串初始化
- 13. 初始化字符串用雙引號
- 14. 字符串不斷初始化爲空
- 15. 字符串的聲明和初始化
- 16. 連接字符串未初始化
- 17. 字符串列表初始化
- 18. 字符串變量初始化錯誤
- 19. NullPointerException(初始化字符串時)
- 20. C++的初始化字符串指針
- 21. 初始化多朦字符串數組
- 22. 用argv初始化C++字符串
- 23. 字符串初始化失敗
- 24. 初始化ObjectC中的空字符串?
- 25. C++ 11字符串初始化
- 26. 使用初始化字符串數組
- 27. 的C#初始化字符串數組
- 28. 使用nsmutabledata初始化字符串
- 29. 字符串數組初始化
- 30. 使用字符串初始化
相關:http://stackoverflow.com/questions/10268705/c-why-is-it-possible-to-assign-a-const-char-to-a-char – ulidtko