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

A s*_*ent 2 c++ string header-files

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

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

mol*_*ilo 8

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

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

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