本帖最后由 aaron0919 于 2022-7-31 15:39 编辑
index.c++: In function 'int main()':
index.c++:6:21: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
6 | char *str = "I Love My BeiBei ! !";
| ^~~~~~~~~~~~~~~~~~~~~~
解决方法:
char *str = "I Love My BeiBei ! !"改为
char* p = (char*)"I Love My BeiBei ! !";即可
我们在学习c或者c++的时候都知道,如果在赋值操作的时候,等号两边的变量类型不一样,那么编译器会进行一种叫做 implicit conversion 的操作来使得变量可以被赋值。
在我们上面的表达式中就存在这样的一个问题,等号右边的"abc"是一个不变常量,在c++中叫做string literal,type是const char *,而p则是一个char指针。如果强行赋值会发生什么呢?没错,就是将右边的常量强制类型转换成一个指针,结果就是我们在修改一个const常量。编译运行的结果会因编译器和操作系统共同决定,有的编译器会通过,有的会抛异常,就算过了也可能因为操作系统的敏感性而被杀掉。
像这种直接将string literal 赋值给指针的操作被开发者们认为是deprecated,只不过由于以前很多代码都有这种习惯,为了兼容,就保留下来了。