#include "stdafx.h" #include <iostream> #include <string> using std::cout; using std::endl; using std::cin; using std::string; int main(void) { char chars1[20]; char chars2[20] = "jaguar"; string str1; string str2 = "pather"; cout << "Enter a kind of feline: " << endl; cin >> chars1; cout << "Enter another kind of feline: " << endl; cin >> str1; cin.get(); return 0; }
上面的程序如果没有#include<string>,则cin>>str1将会报错,而string str1不会报错,那么std::string是在哪里定义的?
头文件之间的包含关系如下
#include <iostream>
#include <istream>
#include <ostream>
#include <ios>
#include <xlocnum>
#include <cstdio>
#include <yvals.h>
在iostream里,使用了宏_STD_BEGIN,该宏是定义在yvals.h里的
但是这里面却没有找到string的定义,后来发现std::string是定义在<xstring>里
#include <iostream>
#include <istream>
#include <ostream>
#include <ios>
#include <xlocnum>
#include <streambuf>
#include <xiosbase>
#include <system_error>
#include <stdexcept>
#include <xstring>
<xstring>通过引用#include <xmemory0>,间接又引用了yvals.h,得以使用_STD_BEGIN宏,将许多类型加入到命名空间std,其中就包括了string