const char*和char*

dha*_*rag 6 c++ const char

我明白那个

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*的类型?

Pet*_*ker 8

不同之处在于后者是合法的而前者不是.这是在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)


Vau*_*ato 6

通过给出类型const char *,它会使意外覆盖内存变得更加困难,因为如果您尝试以下情况,编译器将给出错误:

const char *s = "Hello World!";
s[0] = 'X';  // compile error
Run Code Online (Sandbox Code Playgroud)

如果你不使用const,那么问题可能会在运行时才被捕获,或者它可能只会导致你的程序出现严重错误.