c++的优点,我为什么要坚持学习c++,学习MFC

接触 c++几年了,学了cwindow程序设计和MFC框架也有几年,虽然自己比较懒散,但是觉的学了这么久,感觉的还只是学了皮毛;我不禁问自己 我什么不学习其他语言,为什么非得要学这么难的语言呢。今天一个老师的话也深深的触动了我,他说,你弄过内核编程没?我说没,他来了一句:那你现在C++能做的JAVA也能做,你c++做 的还不到位。。。

我当时惊呆了,,于是重新来审视下自己。了解下c++的优势及弊端。

我无意于加入什么语言最好的争论。最好的语言,肯定是被最多的人使用的语言,因为它实实在在的满足了最多人的需求。
但是我要说明,学C++的人为什么要学C++,它有什么优势:
就其自身而言:

0.C++是严谨、精确、数理化的。标准定义很细致,如果你对标准深入了解,非“固有不可移植特性”代码的运行时状态是可以通过静态分析确定的;而就其本身的语法思路,是层次分明的、呼应的,有着丰富的逻辑演绎色彩的;其语言结构而言,代码绝大多数是显式的、明确的。
1.C++是活着的。它的标准在不断更新,变得更加严谨、易用,却保持着系统性。
2.C++是支持底层操作的。虽然许多底层操作的具体效果会随机器变化有所差异(也就是固有不可移植特性),但如果必要,你依然可以使用它们编写程序、改善效率。
3.C++的标准是庞大、层级分明的。如果你能熟练掌握全部C++标准(语法、标准库),你的代码编写工作会极其精炼、轻松;而如果你只是用它来实验,不愿学习过多细节,它的基础特性又可以认为是一个“完备集”。
4.C++兼容C语言的几乎所有特征(部分极少的不严谨、存在歧义的特性被去除),你依旧采用C语言的思路,却可以轻易加入一个C++工程的开发。
5.C++拥有面向对象(OO)特性,“模板”等高度抽象化特性使得大型工程可以通过它进行整体管理。
6.它考虑了兼容性,为连接其他语言的对象文件留有接口。
相对于其他语言:
0.许多语言都是它的派生语言,比如Java、C#。主要目的往往是通过对一些功能的限制、打包,对语言结构的调整,来加强谋一方面特性。
1.它从某个角度说,是向前兼容的,它几乎可以代替C。
2.它继承了C语言的很多优点。
总体而言:
0.C++是多功能的,它是由许多不同的完备子集构成的。因此你可以通过对一些特性的回避,来取得你所预期的效果(诸如:可移植性、结构性、高效性、底层控制力);当然,另一方面,你也可以通过对代码风格的控制来兼顾这些性质。
1.如果你彻底掌握了它,你的代码自由度是极大的。
2.它在近10年是不会过时的。
3.当你学会C++后,学习数量庞大的它的派生语言,都会变得容易。
对于C++学习者的建议:
0.你首先应当明白,你所将要学习的语言规模之庞大。
1.不要试图按照顺序学,最开始只需要学习最基础的部分。
2.永远不要试图背完标准库,就像不要背诵字典一样,它们是用来查的。
3.C++是一个独立于C语言的语言,C语言只是它的一个功能。
4.书嘛,先看看C++ Primer吧,这会给你一个好的开始与好的习惯,但这个绝对很不完整。然后,看看The C++ Programming Language。再就是当年的C++标准,这时候看这个应该是很适合了;如果有空,历年的也看看,理解一下C++的中心思想。
对于C++的使用者的建议:
0.对于一个程序,只使用C++中你所需要的特性。
1.如果你仅仅只是想要极高的效率,然后把C++写得跟C或者汇编一样,就没必要用这个语言了。
2.绝对不允许批评C语言的使用者,C语言是一个极其精简、高效、完备的高级语言。没有任何一个语言可以代替它的地位。它的哲学思想是数学哲学在计算机上完美、完整的体现。
3.如果你需要极其面向对象的代码风格,至少应该做:
0.严格控制指针的使用,所有指针通过类来封装。
1.严格控制内存分配,用类封装。
2.有且仅有一个基类,并由这个类来抽象程序对象。
3.main函数仅仅完成对于一个程序对象的创建、维持与程序结束时的返回。
4.没有任何全局对象。
5.控制好作用域。
6.记住,模板可以变成很多个不同的类。
4.时刻跟紧C++标准,了解自己的编译器对标准的支持情况,但同时一定要发表自己对于标准的设想。
5.一个工程应当有统一的风格,但请允许对每一部分自由地实现。
6.除非你很清楚自己在做什么,否则不要使用难以移植的代码(比如关于标准未定义的方法、嵌入汇编、volatile关键字、内置类型长度、typeinfo等),并且记得在使用前了解你的编译器、操作系统,还有就是做好实验。只有这样,你才能享受C++的可移植特性。
7.只有当你清楚了解标准库的工作机理、编写方法后,再去用它(无论是调用还是继承它),并在可能时尽量用它,它们往往编写得好得不可思议。
8.程序效率跟很多东西相关,比如算法、编译器、细节方法,时刻保持警惕,不要过于自信。

CSDN:你认为C++最大的难点和优势是什么?

陈抒:以我经验来看构成C++学习困难有四点:

  • 知识点广泛而且难度高。按照几年前Scot Mayer在Effective C++中对C++的定义来看,C++是一门多范型语言,包括了C、面向对象编程和泛型编程。程序员需要正确理解很多基础概念,比如,堆和栈的区别、指针、指针的指针、虚函数的内部原理、继承引发的对象内存布局、多继承引发的模棱两可、模板以及编译器推导、STL算法等。C++的内容如此广泛,因此每个知识点的学习和积累都不是件容易的事情, 自然误用的情况常会发生。
  • C++打开了直接面向操作系统API编程的大门,因此使用C++完成工作,很多时候需要学习大量的平台相关的API,这些API有的非常复杂。比如被称为噩梦般的技术,Windows提供的COM/COM+库,其实就是需要了解一大堆基础知识才能操纵好。再比如:面向接口编程、虚函数表、设计模式中的工厂模式、Windows DLL地狱的由来、Windows注册表、序列化、Windows安全、RPC、IDL语言、支持脚本语言的自动化技术(IDispatch)、对象引用计数器,线程安全和套间和ATL模板技术等。
  • 而在C++的演化过程中,因为缺乏商业公司的大力赞助,缺乏良好设计的跨平C++类库,多数人只能使用标准C++库,但跨平台效果也不佳。直到近几年Boost为代表的现代C++库起到了很大的作用。同时,Java程序员早就享受着非常好的支持,SUN的丰富的JDK,大量活跃的开源社区(比如Apache) 对Java的推动也是非常明显的。
  • C++程序员成长周期长,特别是中国很多靠做项目挣钱的成长型企业面对选用C++作为编程语言会有所顾虑。

优势同样很明显:

假定程序员能很好的运用C++,那么程序可以获得很高的性能,消耗较少的资源。在云计算时代,C++在很多关键业务上起到不可替代的作用,也为这个地球节能。举个例子,我有一次要在美国服务器上部署一个JSF编写的网站,安装GlassFish失败是因为虚拟机核心线程和进程的总数被限制,只能换成C++编写的网站。这台服务器还同时运行着C++编写的TCP服务程序和NoSQL数据库。

CSDN:Linux之父Linus Torvald和Google首席工程师、Go语言之父Rob Pike曾表示,C++比较复杂,需要扎实的编程基础和期编程经验,没有丰富经验的程序员很难运用自如。你对此有什么想法或观点?理由是什么?

陈抒:Torvalds对这个世界贡献很大,我每天都在使用Ubuntu和Git,非常感谢他。但不知道他为什么恨C++。他曾说表示如果要用面向对象只需用C#和Java,为什么需要C++。刚巧这三个语言我都很熟悉。我认为仅仅是面向对象的话,C++、Java和C#都能胜任,但是只有C++能够同时达到C的性能。而且GCC团队早就用C++来实现C的编译器,而Linux内核据说使用的正是GCC编译代码,不知道Torvalds做何感想。

如果Go语言之父说将Google的关键服务,比如搜索引擎用非C++语言来替代,不知道他会做何回答。每个语言都有其擅长之处,其实我本人目前很喜欢Lisp语言。如果将来不再需要C++,只能说明我们的科技又有了巨大的进步。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值