C++的坑真的多吗?.doc
上传人:yy****24 上传时间:2024-09-10 格式:DOC 页数:6 大小:156KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

C++的坑真的多吗?.doc

C++的坑真的多吗?.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

C++的坑真的多吗?先说明一下,我不希望本文变成语言争论贴。希望下面的文章能让我们客观理性地了解C++这个语言。(另,我觉得技术争论不要停留在非黑即白的二元价值观上,这样争论无非就是比谁的嗓门大,比哪一方的观点强,毫无价值。我们应该多看看技术是怎么演进的,怎么取舍的。)事由周五的时候,我在我的微博上发了一个贴说了一下一个网友给我发来的C++程序的规范和内存管理写的不是很好(后来我删除了,因为当事人要求),我并非批判,只是想说明其实程序员是需要一些“疫苗”的,并以此想开一个“程序员疫苗的网站”,结果,@简悦云风同学HYPERLINK"http://weibo.com/2388714105/yvqWKkcGV"直接回复到:“不要用C++直接用C,就没那么多坑了。”就把这个事带入了语言之争。我又HYPERLINK"http://weibo.com/1401880315/yvrMMsCuT"\t"_blank"发了一条微博:HYPERLINK"http://weibo.com/1401880315/profile"\o"左耳朵耗子"@左耳朵耗子:说C++比C的坑更多的人我可以理解,但理性地思考一下。C语言的坑也不少啊,如果说C语言有90个坑,那么C++就是100个坑(另,我看很多人都把C语言上的坑也归到了C++上来),但是C++你得到的东西更多,封装,多态,继承扩展,泛型编程,智能指针,……,你得到了500%东西,但却只多了10%的坑,多值啊。结果引来了更多的回复(只节选了一些言论):@淘宝褚霸HYPERLINK"http://weibo.com/1915508822/yvshunX41"也在微博里说:“自从5年前果断扔掉C++,改用了ansic后,我的生活质量大大提升,没有各种坑坑我。”@LaruenceHYPERLINK"http://weibo.com/1170999921/yvsgisAgB"\t"_blank"在其微博里说:“我确实用不到,C语言灵活运用struct,可以很好的满足这些需求.//@左耳朵耗子:封装,继承,多态,模板,智能指针,这也用不到?这也学院派?//@Laruence:问题是,这些东西我都用不到…C语言是工程师搞的,C++是学院派搞的”那么,C++的坑真的多么?我还请大家理性地思考一下。C++真的比C差吗?我们先来看一个图——《HYPERLINK"http://coolshell.cn/articles/1850.html"\t"_blank"各种程序员的嘴脏的对比》,从这个图上看,C程序员比C++的程序员在注释中使用fuck的字眼多一倍。这说明了什么?我个人觉得这说明C程序员没有C++程序员淡定。不要太纠结上图,只是轻松一下,我没那么无聊,让我们来看点真正的论据。相信用过C++的程序员知道,C++的很多特性主要就是解决C语言中的各种不完美和缺陷:(注:C89、C99中许多的改进正是从C++中所引进的)用namespace解决了很C函数重名的问题。用const/inline/template代替了宏,解决了C语言中宏的各种坑。用const的类型解决了很多C语言中变量值莫名改变的问题。用引用代替指针,解决了C语言中指针的各种坑。这个在Java里得到彻底地体现。用强类型检查和四种转型,解决了C语言中乱转型的各种坑。用封装(构造,析构,拷贝构造,赋值重载)解决了C语言中各种复制一个结构体(struct)或是一个数据结构(link,hashtable,list,array等)中浅拷贝的内存问题的各种坑。用封装让你可以在成员变量加入getter/setter,而不会像C一样只有文件级的封装。用函数重载、函数默认参数,解决了C中扩展一个函数搞出来像func2()之类的ugly的东西。用继承多态和RTTI解决了C中乱转struct指针和使用函数指针的诸多让代码ugly的问题。用RAII,智能指针的方式,解决了C语言中因为出现需要释放资源的那些非常ugly的代码的问题。用OO和GP解决各种C语言中用函数指针,对指针乱转型,及一大砣if-else搞出来的ugly的泛型。用STL解决了C语言中算法和数据结构的N多种坑。(注意:上面我没有提重载运算符和异常,前者写出来的代码并不易读和易维护(参看《HYPERLINK"http://coolshell.cn/articles/1724.html"\o"恐怖的C++语言"\t"_blank"恐怖的C++语言》后面的那个示例),坑也多,后者并不成熟(相对于Java的异常),但是我们需要知道try-catch这种方式比传统的不断地判断函数返回值和errno形成的大量的if-else在代码可读