char *s = "Hello World!" ;
被存储在只读存储器和所述字符串文字不能经由指针进行修改。
这是如何从
const char *s = "Hello World!";
不同的也就是 '串' 的char *或为const char *的类型?
char *s = "Hello World!" ;
被存储在只读存储器和所述字符串文字不能经由指针进行修改。
这是如何从
const char *s = "Hello World!";
不同的也就是 '串' 的char *或为const char *的类型?
通过给类型const char *
,这样不容易意外覆盖的内存,因为如果你尝试编译器会给出错误:
const char *s = "Hello World!";
s[0] = 'X'; // compile error
如果你不使用const
,那么问题直到运行时才能被捕获,否则可能会导致程序出错。
哦,是的,我看到试图修改char * s,编译成功,但const char * s,不。所以基本上把const作为一个红旗来改变字符串。酷! – dharag
区别在于后者是合法的,前者不是。这是在C++ 11中做出的改变。形式上,"Hello World!"
的类型为const char[13]
;它可以转换为const char*
。在过去的日子里,它的类型可以是char[13]
,它可以转换为char*
。通过添加const
,C++改变了数组的类型,但保持转换为char*
,以便使用char*
的现有C代码可以在C++中工作,但修改指针指向的文本会产生未定义的行为。 C++ 11取出转化为char*
,所以现在你只能做法律
const char *s = "Hello world!";
'C++ 11删除了转换为char *' - 不在gcc48中。这是gcc的错误? –
@LeonidVolnitsky - 在C++ 11中不允许转换。规则是,编译器必须针对违反约束条件的问题发出诊断,该约束条件不会说“不需要诊断”。所以只需要一个诊断,这有时是一个警告。 –
如果增加'const'改变类型,不会'const
第一种方式已经过时和危险的。 – Beta