【C++】头文件<string.h>有毒,<string>才是正道

在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。都不知道留来有什么用的,但它就是存在的,你又有什么办法?

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值