“const char *”和“const string”之间的确切技术区别是什么

use*_*erX 4 string constants char

我需要对我要问的问题进行深入的技术解释,而不是解决方案。

我已经学习了一个星期的指针,我理解得很好。但是在编写程序时,我偶然发现了这个错误:

无法将参数“2”的“const std::string”转换为“const char*”到“char* strcpy(char*, const char*)”

所以我很容易地解决了string.c_str()没有问题。但我对为什么会这样很感兴趣。我一直在疯狂地寻找为什么 const 字符串与constchar * 不同。当人们解释一个字符串时,他们说它与 char * 没有什么不同,那么为什么在字符串之前添加一个 const 不会使它成为一个const char *

Meh*_*dad 7

string一个用于保存文本数据(字符串)的对象,并且char*一个指向用于保存文本数据(字符串)的内存块的指针

A string“知道”它的长度,但 achar*只是一个指针(指向字符数组)——它没有长度信息。因此,为了能够推断出由 a 表示的“字符串”的长度char*,您必须用特殊的东西来终止它,这通常是'\0'C 中的空字符。

但是 astring不会以'\0'(这是额外的工作没有任何好处)终止自己,所以问题就变成了:如果您需要在两种格式之间进行转换怎么办?

从 a 转换char*为 astring可以隐式发生——string有一个专门用于该目的的构造函数。但去其他方式,你要告诉string对象为null,终止自己和给你一个有效的指针,你的目的。(它不会隐含地这样做,因为它可能需要额外的工作和/或导致代码事故。)