决眦入归鸟:Visual C++开发修行实录
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.5 解决问题

9月9日,10:00,晴

学C++有用吗?这可能是很多即将进入程序员大军初学者们的疑问。

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

(1)这是一门全能的语言

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

“接近”可以理解了,那么“全能”呢?我们知道,C++是兼容C的。不严谨地说,我们可以简单地认为C只是C++的一个子集,所以C能做的,C++也能做,这个应该没有人有异议。那C#和Java呢?它们所能做的,比如网络方面的应用、B/S的方方面面,怎么就没见C++的身影呢?关于这个问题嘛,我们可从另一个角度来看,C#和Java的运行基础是什么?没错,是虚拟机。虚拟机是用C++写的。所以,你完全可以用C++先写一个虚拟机,然后再在虚拟机上解释C++语法。

(2)桌面应用的优势有多大

所谓的桌面应用,狭义一点讲就是桌面应用程序。目前在桌面领域,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或Direct 3D也能做C++的事,但效率却会大打折扣。随着硬件的不断提升,可能这折扣会不断地缩小,但毕竟还是存在的。只要折扣存在,那些游戏厂商就不会放弃C++,因为能优化,为何不优化?

(3)嵌入式领域的乐土

嵌入式领域是C++的天下,C++是永远的王者。看看Win CE的内核代码,看看Win CE的BSP包,全部清一色的C++。甚至于Win CE的应用程序,微软的态度也非常明确,在桌面只能使用.NET的Silverlight,在Win CE SP3添加之后,还更改为C++接口。王者,绝对的王者,根本就不可能有别的语言在这里将C++撼动。

(4)C++很难吗

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

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

学好C++的方法有很多,仁者见仁智者见智,但有一点是共通的,那就是多看书。只要你仔细阅读本书,仔细地消化,相信一定能达到炉火纯青的地步。