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