C++的难点和优势

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++,只能说明我们的科技又有了巨大的进步。


  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值