我明白
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
,那么问题可能直到运行时才被捕获,或者它可能只是导致您的程序出现微妙的错误。