在linux下編寫C++代碼:linux
char* p="wqojbk";
會跳出警告:c++
warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
這是由於在賦值操做的時候,等號兩邊的變量類型不同,那麼編譯器會進行一種叫作 隱式轉換(implicit conversion) 的操做來使得變量能夠被賦值。上面的表達式中,等號右邊的"eqojbk"是一個不變常量,在c++中叫作string literal,type是const char *,而p則是一個char指針。若是強行賦值就是將右邊的常量強制類型轉換成一個指針,結果就是咱們在修改一個const常量。編譯運行的結果會因編譯器和操做系統共同決定,有的編譯器會經過,有的會拋異常,就算過了也可能由於操做系統的敏感性而被殺掉。spa
修改方法:操作系統
const char* p="wqojbk";
或者指針
char* p=(char*)"wqojbk";