IE盒子

搜索
查看: 82|回复: 0

想学C++?这两本书挺不错的

[复制链接]

2

主题

4

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2022-12-4 14:28:15 | 显示全部楼层 |阅读模式
一直有同学通过各种渠道向我咨询C++的学习问题。
C++是一门很好的编程语言,不过呢,国内的教学出现了一些问题。这两天我面试了一些同学,不乏名校的学生,我发现很多同学按照课本上学习,对C++的理解还停留在C++98的版本。
如果不是再额外自学,对于很多很好的现代特性基本没有什么了解。
其实呢,C++11之后,C++发生了翻天覆地的变化,可以称为现代C++了,C++14、C++17、C++20各个版本也一直在持续翻新C++这门古老的语言。
而且,现代C++有很多新特性都对编程大有帮助,我个人是强烈推荐使用这些新特性的,比如:

  • 写起来更舒服,降低程序员的心智负担
  • 更安全
  • 优化编译和项目构建的过程,这个做过大项目的都懂,改一行代码编译半天的痛苦
  • 在某些情况下更容易写出高性能的代码
那么有哪些书适合学习现代C++呢?
很多人推荐C++ Primer这本书,没问题,C++ Primer是一本很不错的书,非常详细、权威。
不过呢,这本书已经N年没更新了,还停留在C++11这个版本。而且说实话,我觉得这本书有点枯燥和无聊。我推荐两本,都是我看过的:
第一本名字叫做《C++20实践入门》,英文名叫做Beginning C++20, From Novice to Professional.
第二本中文名叫做《C++20高级编程》,它的英文名叫做Professional C++,其实直译应该是《专业C++》更贴切一些。
前一本更薄,600多页,相对来说浅显一点,更适合快速接触现代C++。如果你是从C语言、C++98或者C++11过来的,大概率可以看的非常轻松。入门的话,读起来我感觉比C++ Primer也轻松一些。
后一本更厚,中文版900多页,讲的也更深入。同时,划重点,也更激进。
什么意思呢?Marc的这本C++高级编程在任何可能的地方都用了最新的C++20的语法,如果你是从C++98甚至是C++11过来的,你甚至都不认识这是C++,比如

  • 一开头就用了Module,import <iostream>这种写法,摒弃了头文件写法。虽然这个特性非常好,待到完全支持的时候会极大改善C++的使用体验,但这个特性甚至还没有被主流编译器完全支持,作者仍然大胆全面采用了这种写法。
  • 初始化一律使用大括号语法。C++的初始化也是一个一言难尽的事情,前一本书里面我们能看到历史的遗留语法,比如=初始化、括号初始化,后面这本书里面你基本看不到了
如果你没有太多编程基础,或者就是纯小白,我推荐你第一本书,因为它会从最基础的变量开始,给你讲怎么定义变量,写条件判断、循环,定义函数等等,手把手教你写C++,你一章章跟下来,后面去写实用的代码完全没有问题。
第二本则完全不同,如果你是小白,你会看的一头雾水。它一上来几乎不会向你解释编程的基础概念,而是默认你已经懂了上面说的那些东西,然后直接向你展示用现代C++写这些东西的语法是什么样的,跟以前有什么不同。
比如import、std::format这些全新的特性,如果是一个小白,他可能还在疑惑io输入流是啥东西,显然不适合直接看这本书。
但如果你以前有过C++的经验,此时再看就再适合不过了,信息密度很高,没有废话,帮你迅速切入现代C++的良好用法。
所以我的建议是,前一本既适合当作0基础的入门教材,也适合有基础而想迅速了解现代C++语法的人。
后一本更适合当作一本参考书,或者说升级的材料,适合那些有C++基础的人。可以利用零散的时间,每次消化一块,能极大提升对于C++编程的理解。
然后我们简单看下两本书的目录编排。
C++20实践入门

1-8章属于编程的基础知识,比如定义变量,数据类型,条件控制,循环,字符串操作,如何定义函数等。如果没有学过编程,那么这几章很基础的东西比较有帮助。
9-11章属于比较现代的内容,涉及了更多类型、模板函数、模组和命名空间等。
12-15章在讲oop的东西,如何定义类、操作符重载,还有继承和多态性。C++的oop很复杂,这本书的这几章相对不算冗长,对于初学者来说很够用了。
16章是异常处理,17章讲模板类,18章讲移动语义,19章讲了函数指针、匿名函数等,20章讲容器和算法的使用,21章讲了一些关于模板和Concept的更高级的东西。
总之这本书切入平滑,然后逐渐深入,对于现代C++中最重要的特性有一个系统的覆盖,适合从头看到尾当教材用。
C++20高级编程

这本书不会讲入门的知识,直接开始讲中高级的内容。对于某个语法,它会解释怎么使用,但它不会按照一个初学者平滑的学习曲线去编排内容。
这本书的第一部分是对现代C++特性的一些速览,几乎全都是最新的例子,用最短的篇幅展示了最多的最新用法。比如Module等等。
第二部分其实讲的是软件设计,而不光是语言语法的使用。
第三部分的标题叫做专业的编程方式,其中讲了大量的细节技术,比如内存管理、继承技术、IO,甚至还有随机数等等。这一部分很适合随机阅读。
第四部分涉及了更高级的内容,比如扩展标准库,更高级的模板技术,多线程等等。
第五部分着重讲了软件工程的知识。
总体来说,这本书讲了很多入门的书不会涉及的内容,比如标准库的细节,多线程编程,软件工程、测试技术,还有如何提升C++程序的性能和效率。在本书的最后,他甚至谈到了一点跨平台开发,比如怎么在C#和Java里面调用C++代码。
我个人推荐这本书可以当作参考书,可以利用零散的时间,每次消化一块,能极大提升对于C++编程的理解
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表