在C++编程中,领导坚持用char而不用string,string有那么可怕吗?:在C++中优先使用String是一个良好的习惯。除非是C的死忠者习惯如此,否则应该使用String而不是
在C++中优先使用String是一个良好的习惯。除非是C的死忠者习惯如此,否则应该使用String而不是char。
char是用来处理任何8bit数据类型的,逻辑值、整数、字符ASCII码等都可以。要用来处理字符串需要使用char[]数组,比较麻烦,也不好控制。
String是一个模板类,它是专门用来处理字符串的,封装了很多处理字符串的成员函数。并且它是C++标准库的一部分,是所有C++实现都支持的,也是C++创始人推荐使用的。
术业有专攻,应该用哪一个不难选择吧。
作为一名一线开发者,下面说说自己的看法。如有不同意见,欢迎留言讨论。
先说下自己的观点,个人不是很看好你们领导这种,坚持用char而不用string。
既然选择了C++,那么为什么不用STL早已为我们封装好的string呢?
string其实现就是一个带有长度的char * ,帮我们省去了自动管理内存的麻烦,都已经0202年了,你还会担心内存不够用吗?
个人猜想:
也许你的领导在某一项目中使用了string过程中被深深的坑了一把,但是却不知道具体原因,所以立下了祖训:禁止使用string!
也许在调用某个厂商提供的动态库时,在接口中使用了std::string而不是char * ,结果遇到了灵异事件,程序莫名的崩溃了,连自己的调试器都没有进入,至此,禁止使用string 这一莫名的结论就一直流传下来了。
那么如果我们真的遇到某些厂商的SDK出现这种奇葩库,怎么破?
答案很简单:用发布那个dll的VC版本,再写个动态库做封装库,把接口转发成char*。
在VC++编程中CString是一个很重要的概念,用char很啰嗦而且易错。
但为什么有的人热衷于用char呢?快要被时代抛弃的人最爱用。你的领导很显然年龄很大,习惯了之前c语言的那一套路,对CString类没掌握好。
CString对+,一号的重载,对字符串的插入,删除,计算长度,以及格式化输出等等处理有绝对优势。比如对路经”D:\\windows\\tmp\\”的分析,只需要从右或者从左的第一个\\的位置,很容易剥离出d:及文件名,使处理准确。
另外,写法非常自由。可以把好多CString串用十号合在一起。MFC中的函数,字符串传递大都用CString进行。一般的赋值,用=号足矣,不再用那该死的strcpy了。
领导有更高的观点,在你没想到的地方,他做了考量,所以用char,这里不存在好用不好用的问题,是设计需要。
看环境和问题,char 和string 有不同的应用场景。不说明情况,谁知道怎么回事?总的来说,最大的可能是你懒不愿意考虑到底要用char(?)几,所有的都用了string,所以领导才强制你用char。另外,数据库定义字段也有char的长度限制,你不过脑都用string等着爆bug吧。真实情况一般都是char用的多也稳定,少部分情况用string。
题主领导这么做一定有他的道理,估计是踩过让他难以释怀的坑。从根本上来说用string和char,没有太大区别,都是用来解决字符串处理。
血淋淋的工程经验分享给大家,在应用到生产系统的程序编码时,原则是用熟不用生,尽量做到一切在掌握中。新的语法糖或者特性固然很好,如果没有经历过实际生产运行实践,你必须持谨慎态度。在某大厂就明确要求不能使用STL类库的,只能使用自己封装的类库。
C++编程积累到一定阶段,基本上都会总结出自己的一套类库的。拿我自己来说,我是有自己的字符串处理,多线程编程、可变数组、线程池等等类库。随着C++标准的完善,我也会同时审查并更新自己的类库。更新时使用适配器模式的设计思想,尽量保持对外的接口不变,日积月累,形成了自己的编码风格。更为重要的是,出了问题之后,我会在短时间内解决,因为那些代码我都滚瓜烂熟了。
再回到题主提及的这种情况,习惯使用char的程序员比使用string的程序员,对内存管理的理解要深刻。比如,类或结构体的成员变量尽可能在声明时是固定数据类型。不然的话,由于创建的对象的大小所占的内存是可变的,很容易产生非预期的内存错误。在32位编译器中,char类型的成员变量,无论是char指针占4个字节,还是固定大小的字符串数组,类的变量占用的内存是固定的。string类型的变量,因为内存是变化的,隐患也由此埋下,一旦出现问题也非常难以排查。不是有句话说,没有经历过的事情都无法做到身同感受。
我给题主一个建议,这两种用法你应该都会,并能对比使用。也就是,知道在什么场景使用string来处理字符串来提高效率,也知道在什么场景下必须使用char方式。
最后,祝题主和屏幕前的你,C++水平更上一层楼。
我是代码Go说科技,码农的视角看科技,带给大家不一样的感受。欢迎大家阅读评论转发加关注。
在嵌入式上,char一定好用,string就不一定了。
C在开发效率上的确不去C++,但是至今没被淘汰,自然有其独特的优势。
你可以问问这个前辈,很有可能他会告诉你,这样写是为了可移植性。他可能并非不会用string
你领导说的是对外接口用char不用string,你自己理解偏差吧
string 是C++ std里的模板类。 不是MFC 的CString类。C语言根本没有类的概念。
使用string 最大问题是需要运行时库,所以无法运行在无vc++201x的电脑上。CString 与char *都不会出现这种情况。
CString 比string更好用。所以如果你编写MFC程序最好用CString类。
如果使用结构体,必须使用char[],不能用类。特别是网络封包程序。
考虑到程序能在所有电脑运行,不需要额外安装运行库的情况下,只能强制使用char*
你们领导水平有问题,自己不行,也不愿意接受更好的东西。string对于大部分人来说,比char更加实用,安全。
华裔女赌王就此没落,生前让所有 浓情端午粽飘香,青浦邀你“云体 上海:“云端”展现端午节文化内 “甜咸大战”!明星艺人们喜欢什 如何做一个男人喜欢的情人(如何 当你和你同时出现在同一个场景中 如何在昏暗的光线下设置快门速度 教育在生活中的价值是什么? 世上做坏事的人死后会面临什么因 拜登就任总统后的第一步是什么? 同意/不同意:人生最重要的目标 二战后,德国在调和分歧方面做得 亚伯·林肯恨白人吗? 一个编辑能把你的故事毁得有多严 现在的iPhone6还能坚持再用一年 曹操为什么不杀司马懿? 现在买房是不是最便宜的时候,现 我身边的农业银行营业厅关了,AT 欧洲媒体评选CBA最有实力球员, 荣耀play的6+128和荣耀8X的6+128 蚂蚁集团是科技公司还是金融公司 请问机友华为mate30P与华为mate3 听说老詹修剪一次指甲需要5小时 为什么说宝宝“一月睡二月哭三月 戴笠人称戴老板,这个是怎么叫出 没有工作能一次性补缴社保么? 我想知道定向师范生和免费师范生 肺癌引起的咳嗽是怎样的呢? 5000mAh电池的5G手机推荐吗?要 恒大亚冠表现“差强人意”,你觉