C++的string类

C++的string类是一种强化的字符串结构。它在保存字符串数据的同时,还增加了length字段,引用计数,并且预留了内存。因为保存了length,检查字符串长度时,可以在常数时间内完成。因为引用计数,字符串的复制,赋值非常高效,这在传递函数参数这类场合非常有用。因为预留了内存,它在做strcat这类操作时,在string类中叫+=运算,能够减少内存分配。

但是这样一个经过细心设计的东西,还是遭到Linux的老爸Linus的激烈炮轰。来看下这段代码:

string s="C?or C++?";
cout <<s <<" " << "hello world" << " "<< "123" <<"\n";
cout <<s + " " + "hello world" + " "+ "123" +"\n";

这两个输出语句,输出的结果完全相同。不研究string类的实现,谁知道它们的开销相差竟不可以道里计!提示:第二个输出不停的调用加法运算,生成临时字符串,而第一个没有。

因为封装,暗箱操作,C++的string类倾向于保存一些比较固定的文字资料,而C字符串则是开放结构,对它所作的操作,结果完全暴露在程序员的视线之下。所以C风格的字符串在处理分析,扫描,编辑,解析这类操作时显得更灵活。

想象一下,如果你来设计一个文本编辑器。编辑器包含的文字数据随时都在变化之中,你愿意选择谁,是经过封装而看不到实际数据的C++string类,还是开放结构的C字符串?

作为程序员,只要根据场合选择最有效的数据类型即可。没有必要强迫自己一定要用一种类型彻底替换掉另一种类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值