为什么字符串对象需要#include <string>而不是字符串文字?

时间:2019-06-09 21:07:57

标签: c++ string header-files

将字符串对象用于变量和参数时,为什么需要#include <string>,而对于字符串文字却不需要它呢?例如,您可以说cout << "This is a string literal";而不使用#include <string>

我正在用Deitel Brothers的书学习C ++,并在学习字符数组时想到了这个问题。

2 个答案:

答案 0 :(得分:8)

字符串文字不是std::string对象,而是const char的数组。
"This is a string literal"的类型为const char[25]

在大多数情况下(包括该情况),数组会隐式衰减为指向其第一个元素的指针,并且operator<<会有const char*重载。

在C ++中,“字符串”的含义有些不同,这非常令人困惑,但是过一会儿(然后拔头发和咬牙切齿),预期的含义就会从上下文中弄清楚了。

答案 1 :(得分:2)

类似"This is a string literal"的字符串文字的类型为const char[25],而不是类型std::string。语句cout << "This is a string literal"实际上调用operator <<(ostream&, const char*),字符串文字参数衰减为类型const char*。在这种情况下,没有任何std::string参与。

相关问题