#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); }
结果编译