6

我明白那个

char *s = "Hello World!" ; 

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

这与

const char *s = "Hello World!"; 

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

4

2 回答 2

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!";
于 2013-03-29T13:41:32.903 回答
6

通过将类型指定为const char *,它会更难意外覆盖内存,因为如果您尝试编译器将给出错误:

const char *s = "Hello World!";
s[0] = 'X';  // compile error

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

于 2013-03-29T13:41:21.347 回答