Effective C++ 3e 条款1:视C++为一个语言联邦
为了理解C++,你必须认识其主要的次语言。幸运的是总共只有四个:
C。说到底C++ 仍是以C为基础。区块(blocks)、语句(statements)、预处理器(preprocessor)、内置数据类型(built-in data types)、数组(arrays)、指针(pointers)等统统来自C。许多时候C++ 对问题的解法其实不过就是较高级的C解法(例如条款2谈到预处理器之外的另一选择,条款13谈到以对象管理资源),但当你以C++ 内的C成分工作时,高效编程守则映照出C语言的局限:没有模板(templates),没有异常(exceptions),没有重载(overloading)……
Object-Oriented C++。这部分也就是C with Classes所诉求的:classes(包括构造函数和析构函数),封装(encapsulation)、继承(inheritance)、多态(polymorphism)、virtual函数(动态绑定)……等等。这一部分是面向对象设计之古典守则在C++ 上的最直接实施。
Template C++。这是C++ 的泛型编程(generic programming)部分,也是大多数程序员经验最少的部分。Template相关考虑与设计已经弥漫整个C++,良好编程守则中"惟template适用"的特殊条款并不罕见(例如条款46 谈到调用template functions时如何协助类型转换)。实际上由于templates威力强大,它们带来崭新的编程范型(programming paradigm),也就是所谓的template metaprogramming(TMP,模板元编程)。条款48对此提供了一份概述,但除非你是template激进团队的中坚骨干,大可不必太担心这些。TMP相关规则很少与C++ 主流编程互相影响。
STL。STL是个template程序库,看名称也知道,但它是非常特殊的一个。它对容器(containers)、迭代器(iterators)、算法(algorithms)以及函数对象(function objects)的规约有极佳的紧密配合与协调,然而templates及程序库也可以其他想法建置出来。STL有自己特殊的办事方式,当你伙同STL一起工作,你必须遵守它的规约。
- 要系统学习C++,自然离不开学习资料。。。
系统学习之
C++ Primer 第五版 (豆瓣)Stanley B.Lippman
可不看的书:The C++ Programming Language(新手未必参透),
Essential C++(lippman的入门小书,不够系统)
规范使用之
Effective C++ 第三版 (豆瓣)Meyers
Effective STL (豆瓣)Meyers
可不看的书(讲解都远不如Effective系列细致,并且和以上两本有相当可观的重复条目):
C++ Coding Standards(中译名:C++编程规范 ),
Exceptional C++(系列)
分类学习之
1.C++标准程序库:自修教程与参考 (db)Nicolai M. Josutti STL使用必看!
(先学会怎么用,对照Effective STL)
2.STL源码剖析 (豆瓣)(看看容器、迭代器、算法、函数对象乃至分配器的实现技巧)
3.超越C++标准库:Boost库导论 (豆瓣)(Boost有比较完善的doc。可不看的书:《Boost程序库完全开发指南》有点啰嗦)
The Boost C++ Libraries第二版(Sept. 2014)
这本书也非常实用,附带讲解,适合入门!第二版基于 Boost 1.55.0 和 1.56.0 。第一版的中文翻译:Highscore - Boost C++ 库
Boost.Asio C++ Network Programming(一本很好的网络编程入门小书)
4.SGI STL Programmer's Guide(STL的话可以参考SGI的编程指南)
后续:
Effective Modern C++ (豆瓣)Meyers新作!新的C++特性,必看啊!
More Effective C++ (豆瓣)Meyers (这本书没有再版 里面部分内容在Effective C++ 第三版中有提及,所以可以放到后续里再看)
C++设计新思维 (豆瓣)Andrei Alexandrescu
- 要系统学习C++,离不开敲代码(呵呵)
阅读书本,查看文档,实践项目这些都是学习的通用手段,每个人都明白。要训练的是让自己更为高效的掌握这个输入输出不断迭代的过程。系统掌握一门语言,其实也挺难的,有侧重的掌握功能构件,循序渐进,一一击破也许更为恰当。
不看书不看资料肯定是不行,你毕竟要学习的是C++啊,不可能按照别的语言习惯去写,不可能只局限于实现功能,特别是C++还提供了这么多精彩的入门与深入的学习资料。
看我主页简介免费C++学习资源,视频教程、职业规划、面试详解、学习路线、开发工具
每晚8点直播讲解C++编程技术。
网友评论