将字符串对象用于变量和参数时,为什么需要#include <string>
,而对于字符串文字却不需要它呢?例如,您可以说cout << "This is a string literal";
而不使用#include <string>
。
我正在用Deitel Brothers的书学习C ++,并在学习字符数组时想到了这个问题。
答案 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
参与。