我明白那个
char *s = "Hello World!" ;
Run Code Online (Sandbox Code Playgroud)
存储在只读存储器中,并且不能通过指针修改字符串文字.
这有什么不同
const char *s = "Hello World!";
Run Code Online (Sandbox Code Playgroud)
也是'string'char*或const char*的类型?
不同之处在于后者是合法的而前者不是.这是在C++ 11中做出的改变.形式上,"Hello World!"有类型const char[13]; 它可以转换为const char*.在过去,它的类型可以是char[13],可以转换为char*.C++通过添加const,改变了数组的类型,但保持了转换,char*以便使用的现有C代码char*可以在C++中工作,但修改指针所指向的文本会产生未定义的行为.C++ 11删除了转换char*,所以现在你只能合法地做
const char *s = "Hello world!";
Run Code Online (Sandbox Code Playgroud)
通过给出类型const char *,它会使意外覆盖内存变得更加困难,因为如果您尝试以下情况,编译器将给出错误:
const char *s = "Hello World!";
s[0] = 'X'; // compile error
Run Code Online (Sandbox Code Playgroud)
如果你不使用const,那么问题可能会在运行时才被捕获,或者它可能只会导致你的程序出现严重错误.