概括C++代码详解

开发 后端
C++代码具有的灵活性和编译操作性,在代码风格方面表现得如此复杂:程序代码也有风格,这算不得什么新鲜事了。

许多编程人员学习C++代码总结经验为,有的觉得C++语言是一门独立的语言,并不是在C语言的基础上,可以直接学习C++不必先从C下手,但是有的人就觉得C++这款编程语言不如人意。

谁也说不清C++代码究竟能衍生出多少种迥异的风格,但我知道,有许多C++初学者在面对不同风格的C++代码时,经常会误以为自己看到的是好几种完全不同的编程语言——仅此一点就足以提醒我们,研究和廓清C++语言风格的演化和发展规律已是当务之急了。

和文体学家们研究历朝历代文体变迁的工作相仿,研究C++语言风格的流变史也没有什么捷径可走。我们只能依据刘勰在《文心雕龙》中提倡的“原始以表末”[1]的研究方法,循着历史的脉络,推求代码风格的来源,探寻风格演化的内因,并借以阐明技术发展的趋势和规律。#t#

1.带类的C——对C语言风格的因袭 
在1983年12月BjarneStroustrup采纳RickMascitti的建议,将其发明的新语言命名为“C++”之前,人们一直用“带类的C(CwithClasses)”来称呼这种脱胎于C语言的,带有数据抽象机制的“方言”。虽然带类的C在本质上仅仅是一种可以被预处理程序Cpre转换为传统C语言代码(这类似于我们在Oracle中见到的Pro*C语言的预处理过程)的扩展性语言,但它的确在风格上奠定了后来所有C++代码的基础。

  1. class stack {  
  2. char s[SIZE];  
  3. char* min;  
  4. char* top;  
  5. char* max;  
  6. void new();  
  7. public:  
  8. void push(char);  
  9. char pop();  
  10. };  

这段“带类的C”代码录自Stroustrup所著的《C++语言的设计和演化》。代码中的new()其实是类stack的构造函数,这与后来的C++语言有很大的不同。显而易见,带类的C在风格上几乎完整地承袭了C语言的衣钵。代码中的声明语句看上去与C语言一模一样,class的结构也与C语言中struct的结构大致相仿。

这些迹象反映出C++语言来源于C又尽量与C保持兼容的设计思想——这种设计思想既为C++的迅速普及提供了便利(C++语言的顺利推广显然得益于C语言已有的庞大用户群),也在C++的语言风格中深深地烙上了C语言的印记,以至于在若干年后,当C++语言已经基本具备了“独立人格”的时候,Stroustrup还不得不时常提醒人们要尽量抛开C语言的思维方式。

另一方面,Stroustrup从Simula语言借用的类、派生、访问控制等面向对象概念在带类的C中牢牢地扎下了根。据Stroustrup介绍,他为C语言引入面向对象机制的本意在于寻找一种“合适的工具”[2],以便实现分布式系统或解决类似的复杂问题。

但无论怎样,Stroustrup将C的高效和Simula的优雅捆绑在一起的做法都在事实上为C++语言埋下了“双重性格”的种子——很难说这不是C++语言风格多样化的直接诱因。

2. I/O流——C++的新形象
如果说C++语言的生身父母分别是C语言和Simula语言的话,那么,1984年出现的,借助操作符重载实现的I/O流技术就是C++这个幼童甩开父母的庇护,向新的代码风格迈出的第一步了。

  1. class TGDIDemoWindow : public TMDIFrame  
  2. {  
  3. public:  
  4. TGDIDemoWindow( LPSTR ATitle, LPSTR MenuName )  
  5. : TMDIFrame(ATitle, MenuName) {};  
  6. virtual void SetupWindow();  
  7. virtual void ArtyDemo( TMessage& ) =[CM_FIRST + ArtyDemoID];  
  8. virtual void Quit( TMessage& ) =[CM_FIRST + QuitID];  
  9. virtual void WMTimer( TMessage& ) =[WM_FIRST + WM_TIMER];  
  10. virtual void WMDestroy( TMessage& ) =[WM_FIRST + WM_DESTROY];  
  11. };  

上面几行代码来自Stroustrup所著《C++程序设计语言》中的示例程序。注意那一行由“<<”连接的代码,I/O流、变量、字符常量在代码中被巧妙地串联在一起。从技术角度看,这种全新语法的引入弥补了C++代码中的printf()函数族缺乏类型安全机制和扩展能力的弱点。

从代码风格上说,“<<”等通俗易懂的运算符大大改变了程序员对C++语言的第一印象。我自己第一次接触C++ I/O流库时,就曾清晰地感觉到,一个试图摆脱C语言风格束缚的C++代码正顺着“<<”和“>>”组成的溪水“流淌”而来——这种行云流水般的代码风格在十几年前就已经显示出了C++语言在塑造新形象、引进新观念方面的决心和勇气。

责任编辑:chenqingxiang 来源: blue1000.com
相关推荐

2010-01-28 17:10:33

C++

2010-01-25 14:31:07

C++类

2010-02-02 15:59:32

C++赋值函数

2010-01-25 18:05:40

C++语言

2021-12-21 15:31:10

C++语言指针

2010-02-06 13:42:36

C++单件模式

2011-04-20 09:50:45

Virtual

2023-11-09 23:56:21

2010-02-02 11:16:28

C++异常

2024-01-22 10:49:55

C++for循环

2023-10-30 10:29:50

C++最小二乘法

2009-09-17 16:53:15

C#数组

2024-01-18 10:27:30

C++引用函数

2011-03-30 17:20:18

C++引用

2011-05-18 18:05:47

C#C++

2010-01-14 14:40:21

C++代码

2010-02-01 16:13:15

C++继承

2011-07-15 01:10:13

C++内存分配

2024-03-14 11:54:37

C++数据类型

2011-05-18 17:56:38

C#C++
点赞
收藏

51CTO技术栈公众号