“const char *”和“const string”之间的确切技术差异是什么?

时间:2013-04-01 05:27:26

标签: string char const

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

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

cannot convert ‘const std::string’ to ‘const char*’ for argument ‘2’ to ‘char* strcpy(char*, const char*)’

所以我很容易解决string.c_str()没问题。但我对这是为什么非常感兴趣。我一直在疯狂地搜索为什么const字符串不是const char *。当人们解释一个字符串时,他们说它与char *没什么区别,那么为什么在字符串之前添加一个const而不是const char *

1 个答案:

答案 0 :(得分:3)

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

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

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

char*转换为string可能会隐式发生 - string只有一个构造函数用于此目的。但是反过来说,你必须告诉 string对象为null终止自身并为你提供一个有效的指针。 (它不会隐含地这样做,因为它可能需要额外的工作和/或导致代码中的意外。)