为什么字符串对象需要 #include <string> 而不是字符串文字?
Why is #include <string> needed for string objects but not string literals?
为什么在将字符串对象用于变量和参数时需要 #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<<
重载。
"string" 在 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
。
为什么在将字符串对象用于变量和参数时需要 #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<<
重载。
"string" 在 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
。