[英]Initializing non-const parameter with string literal
所以,我哪里錯了? 為什么要編譯?
之所以進行編譯,是因為您的編譯器太寬松,而您的編譯器太寬松了,因為在C ++ 03中,從字符串文字到char*
的隱式轉換僅被棄用 ,而不是無效的。
基本原理是與舊版C API向后兼容。 根據C ++ 03標准的第4.2 / 2段:
可以將不是寬字符串文字的字符串文字(2.13.4)轉換為“ pointer to
char
”類型的右值; 寬字符串文字可以轉換為“wchar_t
指針”類型的右值。 無論哪種情況,結果都是指向數組第一個元素的指針。 僅當存在顯式的適當的指針目標類型時才考慮此轉換,而在通常需要從左值轉換為右值時則不考慮這種轉換。 [ 注意 :不建議使用此轉換。 見附件D。
但是,在C ++ 11中,隱式轉換是非法的(上面的段落已被完全刪除)。
我可以合法地取消引用並修改構造函數內部的指針嗎?
您可以但不能修改已取消引用的對象。 這樣做將是未定義的行為,因為對象的類型是const
限定的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.