今天碰到了這個警告,老老實實的google了一下,以下是收獲:
問題是這樣產生的,先看這個函數原型:
void someFunc(char *someStr);
再看這個函數調用:
someFunc("I'm a string!");
把這兩個東西組合起來,用最新的g++編譯一下就會得到標題中的警告。
為什么呢?原來char *背后的含義是:給我個字符串,我要修改它。
而理論上,我們傳給函數的字面常量是沒法被修改的。
所以說,比較和理的辦法是把參數類型修改為const char *。
這個類型說背后的含義是:給我個字符串,我只要讀取它。
很自然的延伸一下。 如果我既要傳字面常量又要傳字符串變量怎么辦呢?......重載