`
java-mans
  • 浏览: 11431125 次
文章分类
社区版块
存档分类
最新评论

学C++是否还有价值?

 
阅读更多

对这个问题会感到困惑的,也只有那些刚踏入编程大门的初学者。因为对于很多工作多年的老年而言,看到这个问题也只会会心一笑。对于他们而言,无所谓存在是否要学C++的问题。他们所处的环境,所做的业务,已经决定了他们只能使用何种语言。更进一步,那些得道的大侠,语言只不过是他们的工具,信手拈来,他们心中已经没有语言,他就是语言,语言就是他,合而为一,乃为共同体。

开篇之前,先略微声明一下。本文目的不在于为C++辩护或抬举,当然也不会有为此而抬高或打压别的编程语言的意图。所有的,仅仅是有感而发,并且还是从我个人的角度,有所缺失在所难免。如果你是老鸟,其中之缺还望相见一笑;如果你是菜鸟,对于文中的赞美和批评,请擦亮眼睛,别被我忽悠了。

首先我们先要知道一点,C++是一门什么语言?简单点来说,C++是一门接近于全能的语言。为什么说是接近呢?因为C++有一门语言是无法取代的,那就是汇编。再直白点来说,汇编对于寄存器的操作,C++是无法胜任的。不信?你试试用C++来改写一下PC寄存器看看?没辙吧?

"接近"可以理解了,那么"全能"呢?我们知道,C++是兼容C的。不严谨地说,我们可以简单认为C只是C++的一个子集,所以C能做的,C++也能做,这个应该没有人有异议。为了方便,以下所描述的C++,在某些方面也代表C,之所以没采用C/C++这样的写法,仅仅是为了保护键盘而已。转回正题,那C#呢?JAVA呢?它们所能做的,比如网络方面的应用,B/S的方方面面,怎么就没见C++的身影呢?关于这个问题嘛,我们从另一个角度来看,C#和JAVA的运行基础是什么?没错,是虚拟机。虚拟机是用什么写的?嘿嘿,C++。所以,你完全可以用C++先写一个虚拟机,然后再在虚拟机上解释C++语法。是不是很酷?当然,我想现实中是不会有人那么去做的。就像从深圳到上海,你可以坐飞机去,也可以骑自行车去。两者都能到达目的地,但我估计没几个人会选择后者。这就是效率问题。坐飞机,眼一睁一闭,就到了;骑自行车?呃,这时间就不好估计了。所以这领域,该让C#的,或是JAVA的,就让它们去折腾吧。至于C++,就让它干在一旁瞪眼好了,除非你一定想要耍耍酷。

接着,我们就来看看桌面应用吧。所谓的桌面应用,我们狭义一点,就是桌面应用程序。总的来说,目前在这领域,C++确实还能占有一席之地。但这仅有的一席之地,也岌岌可危。在XP之前,因为系统都是没有预装.net framework,所以C++的对手无非就是VB和DELPHI,但这两者根本无法撼动C++这颗大树。虽然XP也能装.net framework,但为了一个应用而弄一个体积如此巨大的玩意,却有那么一点点的不现实。但后XP时代,世界就不一样了。Vista已经预装了.net framework,更不用说Windows 7。甚至还有传言,Windows 7的用户界面就是用C#搞定的。何况,C#还有杀手锏,能和Silverlight完美结合,大大减轻UI的开发难度。看起来,在今后的日子,在这个桌面应用领域,C++日子过得并不舒坦。在这领域,可能C++还能耀武扬威的,也许就剩下大型的3D游戏了。虽然用.net配合OpenGL或Direct3D也能做C++的事,但效率却会大打折扣。虽然随着硬件的不断提升,可能这折扣会不断缩小,但毕竟还是存在的。只要折扣存在,那些游戏厂商就不会放弃C++,因为能优化,为何不优化?但,也许也仅仅限于此了。C++,它泪流满面。

最后呢,就是嵌入式领域。在这里,是C++的天下,C++是永远的王者。它不是一个人在战斗!此刻,它灵魂附体!你见过那些RTOS是用C++以外的语言写的(再次重申,正如前文所说,这里的C++也代表了C)?至少我印象中没有。嵌入式linux支持.net?除非微软的脑袋秀逗了。也许有人说,WinCE不是可以支持.net么?支持是可以支持,但并不代表所有的WinCE设备都支持。因为WinCE是可裁剪的操作系统,也许是为了节约内存空间,也许是为了启动速度,或是由于别的杂七杂八的,甚至莫名其妙的理由,很多厂商根本就不会将.net这个会将系统膨胀至少4M的组件加到产品去。看看WinCE的内核代码,看看WinCE的BSP包,哪里有.net代码的身影?全部清一色的C++。甚至于WinCE的应用程序,微软的态度也非常明确,在桌面只能.net使用的Silverlight,在WinCE SP3添加之后,却是更改为了C++接口。王者,绝对的王者,根本就不可能有别的语言在这里将C++撼动!此时,C++站起来了!腰板直了!

说了那么多,那么我们的最后,就来看看为什么大家都说学好C++难吧。如果你对学好C++没啥兴趣,以下的文字估计对你也没啥营养,你可以完全忽略不计,可以很愉快或很气愤地将当前网页给咔嚓掉。

其实学C++很简单,但难就难在这个"好"字。初学者会发现,入门很简单,因为C++也没啥语法;但搞清楚语法后,接下来就犯糊涂了,下一步应该怎么走呢?只所以产生这种原因,是因为C++太灵活了。对于一种功能,C++有各种各样的方法,究竟什么方法才是最合适的?比如说,传递给函数的形参,什么时候该使用指针,什么时候该使用引用?就连平常得再也不能平常的指针转型,有C的括号形式,还有C++特有的dynamic_cast和reinterpret_cast,究竟哪个才是该使用的?更不用说分配内存了,既有malloc,还有new,如果算上STL的话,还有一个resize。我想所有的这些,对于初学者而言,如果他看着这些能够腿不痛腰不酸,那么我强烈佩服这人的淡定力。

C++还有更让初学者郁闷的是,即使不用STL,不用类,不用虚拟继承,甚至不用C++的一切特性,也是能够完成所相应的功能。所以,疑惑了,C++是什么?也许这时候,很多人就会想,如果选择是唯一的,那是多么地幸福啊!因此,很多人就转向了C#(或别的语言),因为对于某些操作,方法是唯一的;即使不是唯一,也没有C++那么繁多。

没打算在这论述该如何学习C++,因为一千个人有一千种方法,而这一千种方法,还不一定适合你。但有一点是共通的,那就是多看书。将市面上经典的C++著作,仔仔细细地消化,相信一定能达到炉火纯青的地步。即使达不到吧,也没事,不会作诗也会呤吧?只是,这时候意志力就非常重要,当然也需要那么一点点情商,要相信没有迈不过的坎。

最后的最后,以一句来结尾:C++有风险,入行需谨慎。

分享到:
评论

相关推荐

    由浅入深学C++基础进阶与必做300题 源程序

    由浅入深学C++基础进阶与必做300题 源程序 解压后122M C++是近年广泛使用的程序设计语言,由C语言的基础上发展而来,实现 了由面向过程到面向对象的转变,全面支持面向对象的程序设计方法。C++ 语言在软件工业领域...

    21天学通Visual C++(第2版)

    《21天学通C++(第2版)》站在...《21天学通C++(第2版)》适合没有编程基础的C++语言初学者作为入门教程,也可作为大、中院校师生和培训班的教材,对于C++语言开发的爱好者,《21天学通C++(第2版)》也有较大的参考价值。

    《由浅入深学C++-基础、进阶与必做300题》pdf格式 (完整版 带目录

    《由浅入深学C++:基础、进阶与必做300题(含DVD光盘1张)》是C++语言的入门教程,较为系统地介绍了C++语言的基础内容。本书共分为3篇22章,详细介绍了C++语言的基础知识、面向对象、标准模块、底层开发和综合案例。...

    21天学通c++ 一本不错的学习教程

    本书是C++语言的入门教程,较为系统地介绍了C++语言的基础内容。... 本书适合没有编程基础的C++语言初学者作为入门教程,也可作为大、中院校师生和培训班的教材,对于C++语言开发的爱好者,本书也有较大的参考价值。

    新手学习c++零起点学通C++

    《零起点学通C++:多媒体范例教学》总结了十... 《零起点学通C++:多媒体范例教学》适合从未学习过任何编程语言的新手,以及学习c++多年,仍旧不能融会贯通的读者,对于正在使用c十+进行开发的程序员也有很好的参考价值。

    21天学通c++

    在初学者的角度,较全面地介绍了c++的相关知识,较为系统地介绍了... 本书适合没有编程基础的c++语言初学者作为入门教程,也可作为大、中院校师生和培训班的教材,对于c++语言开发的爱好者,本书也有较大的参考价值。

    零起点学通C++ 范磊.pdf

    适合从未学习过任何编程语言的新手,以及学习c++多年,仍旧不能融会贯通的读者,对于正在使用c十+进行开发的程序员也有很好的参考价值。

    《C++17 完全指南》

    迁移到 C++17 并不像迁移到 C++11一样是一个巨大的变化,但 C++17也包含了非常多很小但却很有价值的语言 和库特性。它们再一次改变了我们使用 C++编程的方式,无论是对应用程序员还是提供基础库的程序员来说都 是...

    21天学通Visual C++ 光盘part3

    本书适合Visual C++的初学者,也可作为大、中专院校师生和培训班的教材,对于Visual C++的爱好者,本书也有很大的参考价值。 本书附赠DVD光盘1张,内容包括超大容量手把手视频、电子教案(PPT)、编程参考宝典电子书...

    21天学通Visual C++ 光盘part2

    本书适合Visual C++的初学者,也可作为大、中专院校师生和培训班的教材,对于Visual C++的爱好者,本书也有很大的参考价值。 本书附赠DVD光盘1张,内容包括超大容量手把手视频、电子教案(PPT)、编程参考宝典电子书...

    C++开源程序库 C++开源程序库

    比如在线程库方面,还有ZThread、boost::thread,如果放大到C/C++领域,还有APR,还有CII。在文件和目录操作方面,boost也有相应的组件,而在网络编程方面有socket++,还有boost::asio,未来的C ++0X中几乎肯定有一...

    C++ 入门经典(第三版).pdf

    C++入门的必看书籍 “对于初学者,C++语言似乎比其他语言更难,但其功能...本书不针对任何特定的编译器或平台,无论读者是使用Windows PC,还是使用最新的Unix工作站或是超级计算机,本书都是有价值的学习工具书。 

    达内内部C++培训教程(价值800)

    这是好朋友达内里面的教师给我的一些内部教材,有很多朋友想去达内培训的你们可以先看看教程,给培训打下基础,不去培训的,也可以学习C++, 我认为是比较好的

    一个C++的标准库很有实用价值

    c++标准库的东西,很不错,适合C++库的学习

    C++ 语言命令详解(第二版) pdf

    C++ 语言命令详解 全书由两大部分及四个附录和一个词汇表构成,第一部分介绍 C++的基本概念以及C++程序设计方法,这部分从C++最基本的概念讲 起,覆盖最新C++标准中的所有概念并重点介绍类...级程序员的有价值的参考书.

    C、C++笔试题集锦2 很有价值的学习资料

    C、C++笔试题集锦 很有价值的学习资料,希望对你的学习有帮助

    数学形态学腐蚀、膨胀、开、闭、细化的c++代码

    数学形态学基本操作的c++代码,包括腐蚀、膨胀、开、闭、细化。代码里有详细的中文注释,具有参考价值。

    关于c++的,特别好的学习资料

    这个是关于c++的学习资料,下了绝对不后悔,很有价值,文件有点大

    C++程序员UML实务手册代码

    本书介绍了C++程序员如何利用UML进行建模,以便更好地进行C++程序设计主要内容包括:C++文件结构,...本书实例丰富,讲解深入浅出,适合软件开发人员参考,尤其适合C++程序员阅读,对学习设计模式的朋友很有参考价值

    c++的课件 C++的系统学习

    这时是C++的系统学习 材料炎灶替价值人 腔巍峨炒股标杆遥不嫌产产产产产产不为主吵首席

Global site tag (gtag.js) - Google Analytics