char *s = "Hello World!" ;
被存儲在只讀存儲器和所述字符串文字不能經由指針進行修改。
這是如何從
const char *s = "Hello World!";
不同的也就是 '串' 的char *或爲const char *的類型?
char *s = "Hello World!" ;
被存儲在只讀存儲器和所述字符串文字不能經由指針進行修改。
這是如何從
const char *s = "Hello World!";
不同的也就是 '串' 的char *或爲const char *的類型?
通過給類型const char *
,這樣不容易意外覆蓋的內存,因爲如果你嘗試編譯器會給出錯誤:
const char *s = "Hello World!";
s[0] = 'X'; // compile error
如果你不使用const
,那麼問題直到運行時才能被捕獲,否則可能會導致程序出錯。
哦,是的,我看到試圖修改char * s,編譯成功,但const char * s,不。所以基本上把const作爲一個紅旗來改變字符串。酷! – dharag
區別在於後者是合法的,前者不是。這是在C++ 11中做出的改變。形式上,"Hello World!"
的類型爲const char[13]
;它可以轉換爲const char*
。在過去的日子裏,它的類型可以是char[13]
,它可以轉換爲char*
。通過添加const
,C++改變了數組的類型,但保持轉換爲char*
,以便使用char*
的現有C代碼可以在C++中工作,但修改指針指向的文本會產生未定義的行爲。 C++ 11取出轉化爲char*
,所以現在你只能做法律
const char *s = "Hello world!";
'C++ 11刪除了轉換爲char *' - 不在gcc48中。這是gcc的錯誤? –
@LeonidVolnitsky - 在C++ 11中不允許轉換。規則是,編譯器必須針對違反約束條件的問題發出診斷,該約束條件不會說「不需要診斷」。所以只需要一個診斷,這有時是一個警告。 –
如果增加'const'改變類型,不會'const
第一種方式已經過時和危險的。 – Beta