首页 > 编程语言> > 警告[warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings\]]
警告[warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings\]]
作者:互联网
在C++中,
char* p = "abc"; // valid in C, invalid in C++
会跳出警告:warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
改成下面会通过warning
char* p = (char*)"abc"; // OK
或者改成下面:
char const *p = "abc"; // OK
原因解析:
如果在赋值操作的时候,等号两边的变量类型不一样,那么编译器会进行一种叫做 implicit conversion 的操作来使得变量可以被赋值。
在上面的表达式中就存在这样的一个问题,等号右边的"abc"是一个不变常量,在c++中叫做string literal,type是const char *,而p则是一个char指针。如果强行赋值会发生什么呢?没错,就是将右边的常量强制类型转换成一个指针,结果就是我们在修改一个const常量。编译运行的结果会因编译器和操作系统共同决定,有的编译器会通过,有的会抛异常,就算过了也可能因为操作系统的敏感性而被杀掉。
像这种直接将string literal 赋值给指针的操作被开发者们认为是deprecated,只不过由于以前很多代码都有这种习惯,为了兼容,就保留下来了。
原文链接:
https://www.cnblogs.com/zkfopen/p/10521715.html
标签:abc,constant,string,C++,char,编译器,赋值 来源: https://www.cnblogs.com/hiccuplh/p/16345742.html