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