#include <iostream> using namespace std; int fuc(char *a) { cout << a << endl; } int main() { fuc("hello"); }
Linux 環境下當GCC版本比較高時,編譯代碼可能出現的問題ios
問題是這樣產生的,先看這個函數原型:函數
void someFunc(char *someStr);
再看這個函數調用:spa
someFunc("I'm a string!");
把這兩個東西組合起來,用最新的g++編譯一下就會獲得標題中的警告。code
爲何呢?原來char *背後的含義是:給我個字符串,我要修改它。blog
而理論上,咱們傳給函數的字面常量是無法被修改的。字符串
因此說,比較和理的辦法是把參數類型修改成const char *。原型
這個類型說背後的含義是:給我個字符串,我只要讀取它。string
如何同時接收const類型和非const類型?重載io
#include <iostream> using namespace std; int fuc(char *a) { cout << a << endl; } int fuc(const char *a) { cout << a << endl; } int main() { char a[] = "hello 123"; fuc(a); const char b[] = "hello 123"; fuc(b); }
結果編譯