在C++中,因为字符串并不是特定类型,所以要在使用字符串的时候,要引入头文件,但是,如果你引用了有毒的头文件<string.h>,将导致,你可以正常地使用用string变量,但你却无法cout一个string,如下图所示:
什么,你这C++是在逗我,你cout<<竟然无法输出一个string,这可是如假包换的string啊!那是因为:STL中的许多头文件(这其中就包括,Visual C++环境下)都包含std::basic_string类的定义式,因为它们都间接地包含了<xstring>(但不要试图直接包含<xstring),这就保证了你可以仅include这些头文件(如本例的#include <iostream>)就可使用std::string类,然而,问题在于与之相关的operator<<却定义在<string>头文件,你必须手动地将之包含。
也就是在说,string的cout<<运算符重载在<string>文件里面,因此,头文件<string.h>是有毒的,他C++有这个文件,这个文件,却没有任何,作用!
同时,如果不用<string>,不小心用了<string.h>将会导致,如下一个这么正常的字符串拼接操作无法使用:
#include<iostream>
#include<string>
using namespace std;
int main(){
string a="a";
char* b="b";
char c[]="c";
cout<<string(a)+string(b)+string(c)+"字符串"<<endl;
return 0;
}
运行结果如下:
C++虽然不能像其它语言那样直接用+号,拼接字符串,但在对于char[],char*,string这里类型,还是可以通过string()将其转化成字符串,然后利用+,在string与string变量之间拼接。至于int与string,你可能需要参考《【C++】int与string的互转》(点击打开链接),但总比你只会用strcat要好。不过,如果你引用错<string.h>,那么上述拼接字符串的代码则会报错:
因此,在C++对于字符串的处理,有时候报错,不是不能这样写,就是因为头文件<string.h>有毒,<string>才是正道。<string.h>比较废,里面一个有用的方法都没有,甚至还不能cout。都不知道留来有什么用的,但它就是存在的,你又有什么办法?