const char *和char *

时间:2013-03-29 13:36:35

标签: c++ char const

我理解

char *s = "Hello World!" ; 

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

这与

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

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

2 个答案:

答案 0 :(得分:8)

不同之处在于后者是合法的而前者不是。这是在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!";

答案 1 :(得分:6)

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

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

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