如何更好的学习C++语言?

开发 后端
学习最佳编码实践比学习C++语言更重要。看优秀的代码也比埋头用差劲的编码方式写垃圾代码要有效。直接、清晰、明了。

C++语言是编程界受气最多的一门编程语言,流传的错误的学习C++语言的方法一说就是好几条,许多人在学习C++这们语言上,浪费了大量的时间,这也是人们头疼的事情。

为什么会存在这么多错误认识?原因主要有三个,一是C++语言的细节太多。二是一些著名的C++书籍总在(不管有意还是无意)暗示语言细节的重要性和有趣。三是现代C++库的开发哲学必须用到一些犄角旮旯的语言细节(但注意,是库设计,不是日常编程)。这些共同塑造了C++社群的整体心态和哲学。

单是***条还未必能够成气候,其它语言的细节也不少(尽管比起C++起来还是小巫见大巫),就拿javascript来说,作用域规则,名字查找,closure,for/in,这些都是细节,而且其中还有违反直觉的。但许多动态语言的程序员的理念我猜大约是学到哪用到哪罢。但C++就不一样了,学C++之人有一种类似于被暗示的潜在心态,就是一定要先把语言核心基本上吃透了才能下手写出漂亮的程序。这首先就错了。

这个意识形成的原因在第二点,C++书籍。市面上的C++书籍不计其数,但有一个共同的缺点,就是讲语言细节的书太多——《C++ gotchas》,《Effective C++》,《More Effective C++》,但无可厚非的是,C++是这样一门语言:要拿它满足现代编程理念的需求。

尤其是C++库开发的需求,还必须得关注语言细节,乃至于在C++中利用语言细节已经成了一门学问。比如学习C++语言模板在设计之初根本没有想到模板元编程这回事,更没想到C++模板系统是图灵完备的,这也就导致了《Modern C++ Design》和《C++ Template Metaprogramming》的惊世骇俗。

这些技术的出现为什么惊世骇俗,打个比方,就好比是一块大家都认为已经熟悉无比,再无秘密可言的土地上,突然某天有人挖到原来地下还蕴藏着最丰富的石油。在这之前的C++虽然也有一些细节,但也还算容易掌握,那可是C++程序员们的happy old times,因为C++的一切都一览无余,everything is figured out。

然而《Modern C++ Design》的出世告诉人们,“瞧,还有多少细节你们没有掌握啊。”于是学习C++语言程序员们久违的激情被重燃起来,奋不顾身的踏入细节的沼泽中。尤其是,模板编程将C++的细节进一步挖掘到了***——我们干嘛关心涉及类对象的隐式转换的优先级高低?看看boost::is_base_of就可以知道有多诡异了。

但***的问题还在于,对于这些细节的关注还真有它合适的理由:我们要开发现代模板库,要开发active library,就必须动用模板编程技术,要动用模板编程技术,就必须利用语言的犄角旮旯,enable_if,type_traits,甚至连早就古井无波的C宏也在乱世中重生,看看boost::preprocessor有多诡异就知道了,连C宏的图灵完备性(预编译期的)都被挖掘出来了。

为什么要做这些?好玩?标榜?都不是,开发库的实际需求。但这也正是***的悲哀了。在boost里面因实际需求而动用语言细节最终居然能神奇的完成任务的***教材就是boost::foreach,这个小设施对语言细节的发掘达到了惊天地泣鬼神的地步。#t#

不信你先试着自己去看看它的源代码,再看看作者介绍它的文章吧。而boost::typeof也不甘其后——C++语言里面有太多被“发现”而不是被“发明”的技术。难道最初无意设置这些语言规则的家伙们都是oracles?

因为没有variadic templates,人们用宏加上缺省模板参数来实现类似效果。因为没有concepts,人们用模板加上析构函数的细节来完成类似工作。因为没有typeof,人们用模板元编程和宏加上无尽的细节来实现目标… 学习C++语言开发者们的DIY精神不可谓不强。

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

2010-01-26 10:01:17

学习C++

2010-01-15 19:28:59

C++

2010-01-15 16:25:48

学习C++

2010-01-12 10:50:59

学习C++

2010-01-11 14:05:01

C++学习方法

2010-01-13 14:05:55

C++语言

2010-01-13 18:44:03

C++编译

2010-01-15 18:06:20

C++引用

2010-01-08 15:45:04

设置Dev C++

2010-01-22 18:06:24

C++代码

2010-01-22 13:20:27

C++代码

2010-01-25 14:43:00

C++构造函数

2010-01-08 17:13:46

Visual C++环

2010-01-11 14:17:02

C++编程

2010-01-21 18:00:59

C++语言

2010-01-14 17:02:10

学习C++

2010-01-20 15:12:45

C++语言

2010-01-12 10:11:36

学习C++语言

2010-01-22 15:14:37

学习C++

2010-01-27 16:52:31

C++语言学习
点赞
收藏

51CTO技术栈公众号