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

Why is #include <string> needed for string objects but not string literals?

本文关键字:字符串 文本 #include 对象 string lt gt 为什么      更新时间:2023-10-16
为什么当将

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

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

字符串

文字不是std::string对象,它是一个const char数组。
"This is a string literal"的类型为 const char[25] .

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

令人

困惑的是,"字符串"在C++中意味着几种不同的东西,但过了一段时间(以及拔头发和咬牙切齿(,从上下文中就会清楚地了解预期的含义。

"This is a string literal"这样的字符串文字是const char[25]类型,而不是std::string类型。语句cout << "This is a string literal"实际上调用operator <<(ostream&, const char*),字符串文字参数衰减为类型 const char* 。此案不涉及任何std::string