C++ 使用字符串一定要 #include<string> 吗?

下面的 C++11 代码完全没有问题: #include<iostream> using namespace std; int main() { st…
关注者
43
被浏览
77,471

8 个回答

<iostream>需要用到std::ios_base类型,std::ios_base有个成员函数的返回类型是std::locale,std::locale定义在<locale>头文件,<locale>中还有一个叫做std::numpunct的类模板,std::numpunct有一个成员函数的返回类型是std::string。

这就是为什么包含了<iostream>可以使用std::string。但可以看出这一串联系有多么间接和不可靠。

我来补充一下:

std::istream 和 std::ostream 都有 std::ios_base 这个基类。

std::ios_base 的成员函数 getloc 以值返回 std::locale (要求定义可见)。

std::locale 的成员函数 name 以值返回 std::string (要求定义可见)。


所以包含 <iostream> 后能使用 std::string 应该是确定的,不过不一定等价于包含 <string> 。