学习C++时注意事项浅析

开发 后端
想要充分的掌握C++编程技术,那么就要对C++中的结构、语句、变量、函数、预处理指令、输入和输出等内容进行了解掌握。

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

但看了无数篇阐述C++复杂性的文章,和争论C++复杂性的吐沫星子(包括我前段时间写的两篇关于C++的总结)。我始终都有一个感觉——没分析透,就跟盲人摸象一样。正如“Why C++”的一位读者批评的,我在文章里面没有写明到底哪些是C++的“非本质复杂性”。

当然,我自己凭感觉就能知道,而接触C++一段时间的人大致也能知道,但新手乃至非新手则对我所谓的“非本质复杂性”根本没有一个具体的认识,这就使得那篇“Why C++”脱离了原本的意图——面向所有C++使用者和学习者。

同样的原因,在写了“你应当如何学习C++”一文之后,当孟岩先生邀请我给《程序员》写一个系列的文章,介绍一下我在接触C++的过程中的态度和认识转变时,我虽然非常高兴的答应了,但直到现在3个月过去了还是颗粒无收。

为什么?因为我觉得真正本质的问题没有被清晰的触摸到;所以直到现在我都没有动笔,免得废话说了一大堆,除了能被当成小说读读之外,对真正考虑是否要学习乃至使用C++的人未必有什么实际用处。

然而,这么个念头一直都放在潜意识里面。前一阵子和Bjarne通信,谈到了关于C++复杂性的一些想法,在邮件里面总结了一下C++的复杂性来源,感觉思路清晰了许多。而这篇文章要达到的目的,正是传达对C++的复杂性的一个具体而明确的认识,有了这个认识作为支持,我们便可以推导出学习C++的最佳(实践者)的方法。

现在,几乎每个学习C++的都知道C++的核心问题是其复杂性;甚至本身不在C++社群的,也知道这是事实。群众的眼睛是雪亮的,何况这还是个太显而易见的事实。

但看了无数篇阐述C++复杂性的文章,和争论C++复杂性的吐沫星子(包括我前段时间写的两篇关于C++的总结)。我始终都有一个感觉——没分析透,就跟盲人摸象一样。正如“Why C++”的一位读者批评的,我在文章里面没有写明到底哪些是C++的“非本质复杂性”。

当然,我自己凭感觉就能知道,而接触C++一段时间的人大致也能知道,但新手乃至非新手则对我所谓的“非本质复杂性”根本没有一个具体的认识,这就使得那篇“Why C++”脱离了原本的意图——面向所有C++使用者和学习者。

同样的原因,在写了“你应当如何学习C++”一文之后,当孟岩先生邀请我给《程序员》写一个系列的文章,介绍一下我在接触C++的过程中的态度和认识转变时,我虽然非常高兴的答应了,但直到现在3个月过去了还是颗粒无收。

为什么?因为我觉得真正本质的问题没有被清晰的触摸到;所以直到现在我都没有动笔,免得废话说了一大堆,除了能被当成小说读读之外,对真正考虑是否要学习乃至使用C++的人未必有什么实际用处。

然而,这么个念头一直都放在潜意识里面。前一阵子和Bjarne通信,谈到了关于C++复杂性的一些想法,在邮件里面总结了一下C++的复杂性来源,感觉思路清晰了许多。而这篇文章要达到的目的,正是传达对C++的复杂性的一个具体而明确的认识,有了这个认识作为支持,我们便可以推导出学习C++的最佳(实践者)的方法。

为什么要学习(并使用)C++

显然,如果找不出要学习C++的理由,那么谈什么“正确的学习方法”等于是废话。

首先重复一句Bjarne的话:“我们的系统已经是极度复杂的了,为了避开C++的复杂性而干脆不用C++(Linus的做法),无异于因噎废食。

”在所有可用C和C++的领域,C++都是比C更好的语言。当我说“更好的”时候,我说的是C++拥有比C更安全的类型检查、更好的抽象机制、更优秀的库。当然,凡事都有例外,如果你做的项目1)不大。2)编码中用不到什么抽象机制。

甚至ADT(抽象数据类型,例如std::complex这种不含多态和继承的)也用不到,RAII也用不到,异常也用不到。3)你连基础库(如,简化资源管理的智能指针、智能容器)都用不着。那么也许你用C的确没问题;所以如果你的情况如此,不用和我争论,因为我无法反驳你。我们这里说的领域大致是Bjarne在“C++应用列表”里面列出来的那些地方。

底线是:如果把C++中的诸多不必要的复杂性去掉,留下那些本质的,重要的语言特性,简化语言模型,消除历史包袱。

即便是C++的反对者也许也很难找到理由说“我还是不用C++”。在我看来,一个真正从实践意义上理性反对使用C++的人只有一个理由:C++的复杂性带来的混乱抵消乃至超过了C++的抽象机制和库(在他的特定项目中)带来的好处。

值得注意的是,这里需要避免一个陷阱,就是一旦人们认定了“C++不好”,那么这个理由就会“长出自己的脚来”,即,就算我们拿掉C++的复杂性,他们可能也会坚持还是不用C++,并为之找一堆理由。我假定你不是这样的人。

不过,也许最可能的是他会说:“问题是我们今天用的C++并非如此(简洁),你的假设不成立。”是的,我的假设不成立。但虽然我们无法消除复杂性,我们实际上是可以容易地避开复杂性,避短扬长的。这也是本文的要点,容我后面再详述。

【编辑推荐】

  1. C与C++中标准输入实现方式上的一点区别
  2. C++编译器如何对Const常量进行分配存储空间
  3. C++类库设计的基本构思与方法
  4. 玩转C++语言的几种方法
  5. 如何更好的进行C++代码编制
责任编辑:chenqingxiang 来源: 博客园
相关推荐

2010-01-14 18:19:40

C++语言

2010-01-26 16:54:58

学习C++

2010-01-27 09:12:01

C++语言学习

2010-01-20 17:58:54

C++静态成员

2010-01-18 16:12:16

CC++语言

2010-02-03 16:42:45

C++变量作用域

2010-02-03 10:21:46

初学Python

2011-06-14 15:25:28

C++多线程

2009-08-06 16:13:16

C# Web Serv

2010-02-04 11:23:14

Android操作系统

2009-07-28 10:26:30

ASP.NET操作Ex

2010-09-16 09:52:49

CSS display

2010-01-26 16:47:47

VC++6.0

2011-05-03 16:58:55

喷墨打印机墨水

2010-01-18 14:25:19

使用C++Builde

2010-02-03 14:49:54

Python 模块

2010-01-28 11:24:14

C++函数

2010-01-11 16:19:05

C++ Builder

2022-06-22 10:19:20

员工谈判专家

2010-02-04 14:22:25

C++函数模板非类型参
点赞
收藏

51CTO技术栈公众号