C++ 常量char*和char*
我明白C++ 常量char*和char*,c++,char,constants,C++,Char,Constants,我明白 char *s = "Hello World!" ; 存储在只读内存中,不能通过指针修改字符串文字 这和 const char *s = "Hello World!"; 也是“字符串”字符*或常量字符*的类型 通过将类型指定为const char*,更难意外覆盖内存,因为如果您尝试以下操作,编译器将给出错误: const char *s = "Hello World!"; s[0] = 'X'; // compile error 如果不使用const,则问题可能在运行时才会被
char *s = "Hello World!" ;
存储在只读内存中,不能通过指针修改字符串文字
这和
const char *s = "Hello World!";
也是“字符串”字符*或常量字符*的类型 通过将类型指定为
const char*
,更难意外覆盖内存,因为如果您尝试以下操作,编译器将给出错误:
const char *s = "Hello World!";
s[0] = 'X'; // compile error
如果不使用const,则问题可能在运行时才会被发现,或者可能只是导致程序出现细微错误。区别在于后者是合法的,前者不是。这是在C++11中所做的更改。形式上,
“Hello World!”
的类型为常量字符[13]
;它可以转换为常量字符*
。在过去,它的类型可以是char[13]
,可以转换为char*
。C++通过添加<代码> const 更改了数组的类型,但将转换保持到char*
的转换,因此现在您只能合法地进行转换
const char *s = "Hello world!";
第一种方法是不推荐的,而且很危险。哦,是的,我看到尝试修改char*s可以成功编译,但是const char*s不能。因此,基本上,将const作为一个红旗来不改变字符串。酷<代码>C++11删除了对字符的转换*——不在gcc48中。这是gcc错误吗?@LeonidVolnitsky-在C++11中不允许转换。规则是编译器必须对违反约束的情况发出诊断,该约束没有说明“无需诊断”。因此,所需要的只是一个诊断,有时是一个警告。如果添加
const
会改变类型,那么const
或const
不是更有逻辑吗?