繁体   English   中英

为什么不能在 C++ 中有一个非常量 char*?

[英]Why can't you have a non-const char* in C++?

为什么这样做:

char foo[6] = "shock";`

虽然这不起作用:

char* bar = "shock"; //error

为什么bar必须是constfoo不是? Arrays in C 衰减为指针,所以foobar在技术上不具有相同的类型吗?

文字保存在 memory 的保留区域中,不应被代码更改。 更改存储该文字的地址处的值意味着每次任何其他代码尝试使用该文字时,它都会在该 memory 中找到错误的值。因此修改该 memory 是非法的,因此将其视为非法不恒定。

资源

有了这个声明:

char foo[6] = "shock";

变量foochar 类型数组,它包含 6 个非常量字符。 字符串文字包含 const 字符,这些字符在初始化时被复制到数组中。

有了这个声明:

char* bar = "shock"; //error

变量bar指向 char 的类型指针 您试图让它指向"shock"的地址,这是一个包含const char的字符串文字。

您不能在const char 处指向非常量 char 的指针

所以你必须这样做:

const char* bar = "shock";`

因为“shock”是一个常数,所以指向它的指针必须是 const

由于历史原因 C 允许这样做(并导致许多导致 SO 发布的错误)

char* bar = "shock";

大致相当于

const char anonymousArray[6] = "shock";
char *bar = anonymousArray;

Arrays 衰减为指针。 这与实际上是指针不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM