const char * and char *



我明白

char *s = "Hello World!" ; 

存储在只读内存中,不能通过指针修改字符串字面值。

这和

有什么不同?
const char *s = "Hello World!"; 

也是'string' char *或const char *的类型?

区别在于后者是合法的,而前者不是。这是c++ 11中做的一个更改。形式上,"Hello World!"具有const char[13]类型;可转化为const char*。在过去,它的类型可以是char[13],可以转换为char*。c++通过添加const改变了数组的类型,但保留了对char*的转换,以便使用char*的现有C代码可以在c++中工作,但修改指针指向的文本会产生未定义的行为。c++ 11删除了到char*的转换,所以现在你只能合法地执行

const char *s = "Hello world!";

通过将类型指定为const char *,可以使意外覆盖内存变得更加困难,因为如果您尝试:

编译器将给出错误:
const char *s = "Hello World!";
s[0] = 'X';  // compile error

如果您不使用const,那么问题可能直到运行时才被捕获,或者它可能只是导致您的程序出现微妙的错误。

最新更新