浅析C++语言风格问题

开发 后端
下面着重讲述学习C++语言时碰到的相关难题和问题,以及学习C++语言的技巧,如何更好的进行C++语言的学习,希望本文能给大家带来帮助。

对第一次接触到C++语言的用户和学者来说,了解C++语言的概念是非常重要的,那么就先说一下什么是C++语言,所谓C++语言:是一种使用非常广泛的计算机编程语言。

这些迹象反映出C++语言来源于C又尽量与C保持兼容的设计思想——这种设计思想既为C++的迅速普及提供了便利(C++语言的顺利推广显然得益于C语言已有的庞大用户群)。

也在C++的语言风格中深深地烙上了C语言的印记,以至于在若干年后,当C++语言已经基本具备了“独立人格”的时候,Stroustrup还不得不时常提醒人们要尽量抛开C语言的思维方式。

另一方面,Stroustrup从Simula语言借用的类、派生、访问控制等面向对象概念在带类的C中牢牢地扎下了根。据Stroustrup介绍,他为C语言引入面向对象机制的本意在于寻找一种“合适的工具”。

以便实现分布式系统或解决类似的复杂问题。但无论怎样,Stroustrup将C的高效和Simula的优雅捆绑在一起的做法都在事实上为C++语言埋下了“双重性格”的种子——很难说这不是C++语言风格多样化的直接诱因。

如果说C++语言的生身父母分别是C语言和Simula语言的话,那么,1984年出现的,借助操作符重载实现的I/O流技术就是C++这个幼童甩开父母的庇护,向新的代码风格迈出的第一步了。上面几行代码来自Stroustrup所著《C++程序设计语言》中的示例程序。注意那一行由“<<”连接的代码,I/O流、变量、字符常量在代码中被巧妙地串联在一起。

从技术角度看,这种全新语法的引入弥补了C语言中printf()函数族缺乏类型安全机制和扩展能力的弱点。从代码风格上说,“<<”等通俗易懂的运算符大大改变了程序员对C++语言的第一印象。

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

20世纪80年代末到90年代初,X Window、Mac OS、Windows等窗口环境的先后出现为程序设计提出了新的课题,而C++语言兼顾面向对象和传统开发方法的特性无疑使其成为了窗口环境下编程语言的最佳选择。一批基于C++语言的窗口框架不仅在商业上取得了成功,也在很大程度上改变了C++语言本身的风格特点。

最早在窗口开发中赢得大多数程序员青睐的C++框架是Borland公司于1992年内置在Borland C++ 3.1中的OWL(Object Windows Library)框架库。下面这段代码取自Borland C++ 的示例程序:

为了解决窗口编程中最关键的消息映射问题,OWL的设计者为C++语言的成员函数引入了“=[…]”的古怪语法,这是许多用过Borland C++的程序员至今都无法忘怀的一种语言风格。

我承认,Borland公司在C++语言的发展初期为我们提供了最好的编译器和最出色的集成开发环境(IDE),但Borland通过OWL框架为C++引入的另类语言风格的确让人不敢恭维(客观地讲,这笔账也不应全算在Borland头上,因为OWL的前身是Borland从White Water公司购买的框架代码)。

【编辑推荐】

  1. 简介学习C++总结之谈
  2. 对C++库函数进行学习探索总结笔记
  3. C++类库设计的基本构思与方法
  4. C++语言真的还有市场价值?
  5. C++类库设计的基本构思与方法
责任编辑:chenqingxiang 来源: wewill.cn
相关推荐

2010-01-25 14:18:46

C++对象模型

2010-01-19 10:04:30

C++类

2010-01-27 15:05:04

C++标准化

2010-01-22 17:21:32

C++语言

2010-01-18 09:39:25

C++语言

2010-01-27 16:05:06

C++堆栈

2010-01-21 09:34:57

C++语法

2010-01-27 17:16:52

C++构造函数

2010-01-20 10:19:55

C++数组

2021-10-19 14:04:28

C++类型数字

2010-01-26 14:35:11

C++关键字

2010-01-27 15:46:15

学习C++效率

2010-01-28 16:05:09

C++风格与技巧

2010-02-06 17:39:52

C++ strtok

2010-01-14 17:13:53

C++接口

2010-01-21 13:48:30

C++基类

2009-08-03 16:28:53

Java语言与C#语言

2009-06-01 08:48:19

作用域变量作用域对象作用域

2010-01-11 17:22:02

2010-01-12 17:26:37

C++编译器
点赞
收藏

51CTO技术栈公众号