I understand that
char *s = "Hello World!" ;
这个字符串被存储在只读内存中,通过指针无法修改字面值。
这与以下内容有何不同:
const char *s = "Hello World!";
此外,'string' 的类型是char *还是const char *?
"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
会改变类型,那么const<char*>
或const<char[]>
更合理吧? - András Hummer将类型设置为const char *
,可以更难意外覆盖内存,因为如果尝试覆盖,则编译器会报错:
const char *s = "Hello World!";
s[0] = 'X'; // compile error
const
,那么问题可能直到运行时才被捕获,或者只会使您的程序微妙地出现错误。