阐述复杂的C++编程语言技巧说明

开发 后端
C++编程语言仍然在普遍使用,很重要的原因就是因为C++既保持了C语言级别的效率(某些情况下例外),又加入了面向对象的特性。

本文详细介绍说明C++编程语言中的多种范式并行,是一些最复杂问题的表面原因。以至于Doug Lea建议在一个项目里只坚持一个范式。但是这仍然只是表象。归根结底还是因为OO的缺陷,使得与其它范式合作时困难成倍放大。

1. 首先选定一种思维方式(即范式),尽可能只用这一种思维方式解决问题;

2. 如果在局部遇到其他思维方式更得力的问题,则经慎重考虑后,可以将另一种风格包装在局部,解决局部问题。但整个系统在某一层次之上看来,应当是统一一致的。一般C++的开发,应以OB为基本风格。除非有类似MFC那样庞大而成熟的OO库支持,不应贸然在整体上使用OO风格。

3. 多种风格混用,除非有已被充分讨论并验证的方案(即成熟模式),可提供单一风格不能提供的较大优势,否则应极力避免。当然鼓励在研究中探索,但实践是另一回事。C++完全可以在90年左右摆脱C的约束,随后简化模板语法,完善异常模型,接纳可选GC,建立完整的单根类库,付出性能小幅度下降的代价之后,实现语言整体升级。

但是C++选择了另一条路,三大约束坚持到底,坚守系统层面,以替代C为己任。是福是祸,实难判别。如果90年代初选择升级,胜则扼死Java于摇篮之中,败则寸土不保。不过以C++之高性能,胜面应稍大。如今看来,在系统面彻底取代C已无可能。#T#

1994年为STL拖延标准立案时间长达四年,如今来看功过亦存争议。错过黄金时机不说,STL典范一立,库设计风气为之一改。然而在解决应用问题上,泛型较之OO,适应能力远逊之,且应用困难。总之,C++的三大约束,既是其兴起之要素,也是其衰落之源头,同时,又是其今天得以屹立不倒的重要基石。其是非功过,实难一言以蔽之。

C++编程语言之对于C++的意义,其实并不在于使C++重新获得了制胜Java或者C#的机会,而在于巩固了C++作为.NET平台上系统语言的地位。由此知,C++/CLI的发展,的确如Stan Lippman所说,是C++一贯发展思路的延续。三大约束固然已经放弃,但其精神实质仍在,形攻而实守,未来将可作为.NET上唯一最强之系统语言而长命百岁。

C++/CLI决不简单,但在大多数时候,它能够比传统的C++表现的简单些。这就是Andrew Koenig说的,通过复杂实现简单。

C#和Java的繁荣期,则有赖于人们对于大一统的中层次语言的信仰有多坚持。此两种语言无论在系统开发还是在应用开发中都非最优选。目前C#出现一些迹象,引入一些动态语言特性如cmdlet,又强化系统编程能力,想上下通吃。这是一条不归路,必会使C#变得更加复杂怪异。

学习编程语言,通语法能实践,不过十分之一。真正重要的是掌握其多种多样的实用的idioms或模式。这些模式才是体现了语言精神的东西。未掌握各种语言中的主要应用模式,则应羞于用“会”字。常听有人说某某语言一周乃至一两天即可掌握,这个掌握的层次肯定是很低的。

真正要“掌握”语言,则我等凡人,诸事缠身,非得集中精力学习实践一两年,将该语言所擅长领域的应用问题熟悉过一遍,才有可能。若论精通,则十年也不容易。Henry Spencer用了30年C++编程语言,仍乐此不疲;Pragmatic Programmer中评价Ruby说。

学上四个小时就可以用它解决实际问题,但是10年之后还为它层出不穷的新意感到惊讶。偶见有人举出自己“精通和掌握”的工具和语言,动辄长达八九上十种,实为笑柄。真正掌握一种,已经是难能可贵。

熟练掌握两种层次不同,思维不同的语言,应是有抱负的程序员的自我要求。何况如今之软件开发涉猎甚广,仅通编程层次还显不够。不过总之百招会不如一招精,做什么工作都要有自己的过人之处。

责任编辑:chenqingxiang 来源: IT168
相关推荐

2010-01-11 15:55:51

C++语言

2010-01-12 09:39:58

C++语言

2010-01-13 16:08:31

C++语言

2010-01-12 10:11:36

学习C++语言

2010-01-12 10:40:22

C++程序员

2010-01-13 10:16:42

C++软件

2010-01-13 16:44:03

C++

2010-01-13 09:38:17

C++单元测试

2010-01-12 17:33:06

C++

2010-01-11 13:31:03

C++语言

2011-05-30 15:29:32

C++

2010-01-12 15:24:48

C++语言

2010-01-11 10:01:25

C++的编程工具

2010-01-11 09:28:34

C++编程

2010-01-11 10:28:51

C++编程

2010-01-13 17:12:26

C++编译器

2010-01-26 17:11:13

C++编程

2011-07-10 15:26:54

C++

2010-01-28 16:05:09

C++风格与技巧

2011-07-13 16:36:11

C++
点赞
收藏

51CTO技术栈公众号