转知乎,感觉非常棒,适合普通人c++学习路线图

2023-05-16

作者:刘凯新
链接:https://www.zhihu.com/question/23447320/answer/39322848
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

在这里以一个非计算机专业学生的角度从C++书籍的角度补充一下现在排名第一的答案。

我是一名自动化专业的学生,可是迷恋C++编程再加上购书癖,目前大约将国外经典C++书籍全部买完了,没有全部详细读完,但是对各本书的内容及所处的层次都比较了解。

这里单纯讲【看书】方面的总结,不包含项目实践方面。

这里先补充一下第一名回答中没有直接提及的,但也是学习过程中很重要的,一个关于C++学习的分类,两个大方向:面向对象编程(OOP)和泛型编程(GP)。这是两个最基础的方向,不过如果单纯抱着一本国内常见的C++入门书籍看的话,很容易将后者忽略(国内入门书籍过重得介绍C和C++中共有的部分和OO部分,极端忽视GP部分,这可能和GP更多地用于函数库的编程而OO更贴近大部分人实际工作的原因有关吧(>__ 手机码字,英文书名因为方便辨识,书名号不写了哦(>_

那就先从OO方面开始吧。
入门书:首先是两本如同《辞海》般详细的神书:The C++ Programming Language & C++ Primer,这是两本几乎完全涵盖了C++所有特性的书籍,就不做过多介绍了;另外一本同样超赞的Essensial C++,可以看做是一本C++的《新华字典》,也就是上述两本的的简化版;以上3本适合所有同学看,不管是有还是没有C基础的同学,尤其是Primer第五版,随着Moo大神的加入,将Accelerate C++的写作风格带入,呈现出了一种跟第四版完全不同的风格,另外就是C++11标准在第五版被涵盖并放在了醒目的位置,也是超赞的(>_

进阶书:那就不得不提主席大人和他的好基友Meyers的两个著名系列:Excptional 和 Effective系列了,前者包含3本:Excptional C++, More Excptional C++和Excptional C++ Style(中文版叫C++编程剖析),难度逐渐加深。主要是谈工程方面的细节和经验;在这个开始读这个系列之前,有必要将Effective 系列中的两本Effective C++和More Effective C++读一下,尤其是前者,可谓"C++ 程序员必读的第二本书",这个系列是讲述编程风格的。这两个系列读完后可以看看(也可以不用看)《C++编程规范》,这可以说是上面两个系列书的总结。

其实到此,偏OO方向的书也差不多介绍到这里了,之所以到进阶就结束,因为这方面确实是一些很实在的技术,在结合模板比较少的情况下,很少有所谓的"奇淫技巧"。不过在此要专门推荐一本OO方面更高层次的书 Inside the C++ Object Model,详细地讨论了对象的构造、生存、释放等问题,不过对编译器不熟悉的同学看的话可能就比较吃力了(>_

接下来就介绍GP方向的书籍。
大部分GP的书籍都是以C++最核心的库STL作为载体来编写的。
入其实从学习GP开始,就不能算作是C++学习的入门了。不过因为分得比较细,还是按照三个层次来介绍吧。

入门书:个人认为没有入门书(>_
进阶书:C++ Templates,模板学习的圣经,全面地介绍了模板的各个方面;Effective STL ,meyers的Effective系列的第三本,讲述了STL方面编程风格,也介绍了实际编程中STL库中一些容器和算法的用法和误区;Generic Programming and the STL,讲述了泛型编程的核心思想和各种泛型组件(以STL组件为例)。

深入书:《STL源码剖析》,从源代码的角度分析STL中各种容器和算法的实现,【强烈推荐以这本书代替其余任何一本C++数据结构书的学习(前提是如果有信心有毅力学透的话),因为侯捷老师说任何一个C++学生写出来的程序在SIG STL面前只能算三流程序,不妨多看看STL源码】;最后一本则是Modern C++ Design,这是一本充满了"奇淫技巧"的书,用泛型的思想结合模板写出足以让任何人都吃惊的代码——原来还可以这样写。不过这本书中内容的价值则可能是仁者见仁了——一般工作中基本用不到(>_

除开GP和OO这两个方面,另外还有两本书推荐给大家。一本是API Design for C++,顾名思义讲述如何编写高质量的API接口;另一本是《提高C++性能的编程技术》,讲述一些提高程序效率的技巧,让你知道C++同C一样高效。Ps.这本书结合Effective系列和Excptional系列一起看有奇效哦。

好吧,关于C++书籍的介绍就差不多到这里了(boost,loki库我了解甚少,就不敢妄作推荐了)~祝各位同学在书海中遨游(>_


/*************************************2015.2.13添加******************************************/
这里推荐两本比较难以区分偏重于OO还是GP的书。

C++ strategies and tactics(中文名《C++编程惯用法》):这本书的副标题叫“高级程序员常用方法和技巧”,其实别被这个副标题吓住了:) 何谓高级程序员?不同的标准有不同的看法,在学习阶段看看又何妨呢~这本书可以说是总结了在OO、GP、异常、重用等几个方面的诸多知识,可以看做是增加了更多模板和重用知识的Effective C++,不过写作风格则是与之迥异了~

Ruminations on C++(大名鼎鼎的《C++沉思录》),C++界著名的技术伉俪Andrew Koenig &Barbara Moo 倾力著作,PS.这本书最后还有孟岩老师和两位作者的访谈录哦~~(正好这个寒假又重读了这本书,感觉这些技术经典真是让人在不同的时期领悟不同的感悟)。这本书的风格和之前推荐的 Accelerate C++很像,也是以大量实际小工程、“课后作业”这类引人入胜的形式,避开讲述C++繁杂的语法(也因为这本书本来就不是入门书),而直接罗列出C++中常用的技巧,诸如handle类,智能指针,函数对象等,不仅阐述了这些技术产生的原因、设计的思想,更是从源码层次分析了这些技术的实现。个人认为,这本书配合前面提及的More Effective C++一书中后面那些动不动一个就有20页之多的item一起看,将会有很大的收获哦~
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

转知乎,感觉非常棒,适合普通人c++学习路线图 的相关文章

  • 关于C语言等高级语言能不能直接控制硬件的问题

    关于C语言等高级语言能不能直接控制硬件的问题 xff0c 我认为C语言等高级语言不能直接控制硬件 这里谈论的问题本质是 xff0c C语言等高级语言能不能直接对硬件进行编程 我认为 xff0c 不能 众所周知 xff0c 计算机之初的程序员
  • scanf函数输入字符 %c之前要有空格分析

    问题描述如下 xff1a test c int main void int n 61 0 char c while 1 scanf 34 c 34 amp c printf 34 c d n 34 c 43 43 i return 0 这段
  • Linux0.11内核 进程睡眠和唤醒

    当进程等待资源或者事件时 xff0c 就进入睡眠状态 有两种睡眠态 xff0c 不可中断睡眠态 xff08 TASK UNINTERRUPTIBLE xff09 和可中断睡眠态 xff08 TASK INTERRUPTIBLE xff09
  • ubuntu linux 触控板失灵的解决方案

    这几天研究内核的模块机制 xff0c 接触到了一些关于模块的操作命令 xff0c 比如lsmod命令可以列出内核中已经安装的模块 xff0c insmod命令可以安装一个指定的模块 xff0c rmmod可以删除一个指定的模块 也是处于好奇
  • Linux 安装远程桌面并设置添加分辨率

    本来想用本地的kali linux来远程登陆centos的服务器 xff0c 在远程服务器安装VM xff0c 再VM里安装Windows虚拟机 xff0c 用作工作娱乐需要 xff0c 尼玛八颗八核至强CPU xff0c 128G内存 x
  • 将数据库文件导入mysql并输出为txt文件

    大致上MySQL数据库备份可以采用两种方式 xff1a 一种就是直接导出sql语句或者易于导入的其他格式的sql存储文件 xff0c 使用sql语句或者一些可视化客户端导出 xff0c 这种方法非常简单 xff0c 无需赘述 xff1b 另
  • golang gorilla/mux设置静态目录

    发现网上都是类似下面的代码 96 96 96 s 61 34 Users golang golang 34 http Handle 34 static 34 http StripPrefix 34 static 34 http FileSe
  • ios系统removeCachedResponseForRequest无效的替代方案

    相信你能找到我这篇博客 xff0c 肯定是对URLCache缓存有了深刻的理解 xff0c 并且被ios系统api removeCachedResponse ForRequest使用起来并不能删除指定的缓存所困惑 其实也可以自己想办法来模拟
  • DHCPv6报文介绍

    摘自HUAWEI官网 DHCPv6报文格式如图11 2所示 图11 2 DHCPv6的报文格式 表11 1 DHCPv6报文中各个字段的含义 字段 长度 含义 msg type 1字节 表示报文的类型 xff0c 取值为1 xff5e 13
  • vnc服务器的搭建

    vnc服务的概述 xff1a VNC Virtual Network Computing 虚拟网络计算机的缩写 xff0c 主要是完成图形界面的远程控制使用 一个vnc系统是由客户端 服务器端和一个协议组成 服务器是分享其屏幕 xff0c
  • openwrt配置wifi桥接上级AP,再作为ap路由(可实现ip透传,例如远距离图像传输)

    第一步 上级ap配置为 接入点AP xff08 WDS xff09 xff0c 例如无人机的飞机端作为wds ap a xff0c 无线概况里点击修改 b xff0c ESSID改为你想要的名字 xff0c 要选择固定信道 xff08 非常
  • 菜鸟学Linux命令:ssh命令

    转载自品略图书馆 http www pinlue com article 2020 04 1003 1210139769049 html 1 查看SSH客户端版本 有的时候需要确认一下SSH客户端及其相应的版本号 使用ssh V命令可以得到
  • STM32串口发送数据

    串口通信经常作为开发调试的工具 xff0c 所以先介绍下串口通信 串口通讯 Serial Communication 是一种设备间非常常用的串行通讯方式 xff0c 因为它简单便捷 xff0c 大部分电子设备都支持该通讯方式 xff0c 电
  • npm ERR! code EINTEGRITY 解决方案

    报错信息 xff1a Error sha1 HsihLT8VutOkAReGpzpIZJY2twQ 61 integrity checksum failed when using sha1 wanted sha1 HsihLT8VutOkA
  • VScode搭建C/C++开发环境

    目录 1 VScode是什么 xff1f 2 VScode的下载和安装 2 1下载和安装 下载 xff1a 安装 xff1a 2 2环境的介绍 环境介绍 xff1a 安装中文版插件 xff1a 3 VScode配置C C 43 43 开发环
  • 从0开始跑通VINS FUSION(KITTI数据集)

    背景 xff1a VINS FUSION是香港科技大学在VINS MONO后做的推出的多功能版 xff0c 有双目的数据 xff0c 还有和GPS的融合 作为一个SLAM小白 xff0c 记录一下整个的跑通过程 代码连接 xff1a htt
  • ubuntu关于aptitude和apt-get

    起初GNU Linux系统中只有 tar gz 用户 必须自己编译他们想使用的每一个程序 在Debian出现之後 xff0c 人们认为有必要在系统 中添加一种机 制用来管理 安装在计算机上的软件包 人们将这套系统称为dpkg 至此着名的 p
  • C语言链表的简单编写

    代码分为3个部分 xff0c test c head h list c list c封装的函数 include 34 head h 34 创建一个空链表 Linklist list creat 申请一断空间 Linklist L L 61
  • java中a=a++;a=a+1;a+=1执行过程分析

    本文章内容前提是a数据类型为int 当a数据类型为int时 xff0c 执行a 61 a 43 43 后 xff0c a的数值不会变 xff1b 执行a 61 a 43 1后 xff0c 数值加1 xff1b 执行a 43 61 1后 xf
  • 【VPN(虚拟专用网)攻略大全】

    在 VPN 出现之前 xff0c 企业分支之间的数据传输只能依靠现有物理网络 xff08 例如 Internet xff09 由于 Internet 中存在多种不安全因素 xff0c 报文容易被网络中的黑客窃取或篡改 xff0c 最终造成数

随机推荐

  • Linux 如何检测硬盘坏道?

    在 Mac 和 Windows 下检测硬盘坏道有专门的工具 xff0c 或自带 或三方的都挺好用 xff0c 但是如何在 Linux 下检测硬盘坏道呢 xff1f 首先 xff0c 用 lsblk 命令查看下待检测硬盘的名字 xff1a 然
  • 图论-路径优化算法总结

    知乎主页 https www zhihu com people shuang shou cha dai 53 目录 1 xff1a Dijkstra算法 1 1 xff1a 算法思想 1 2 xff1a 算法步骤 1 3 xff1a 代码演
  • uORB发布订阅实例

    PX4SITL仿真 uORB实例 飞控串口读取外部传感器数据 xff1a 飞控开启一个进程读取外部传感器数据 xff0c 发布一个uORB主题 xff1b 另一个进程订阅前一个进程发布的主题 xff0c 订阅到的主题通过mavlink消息发
  • PX4仿真环境搭建

    PX4 SITL Simulation 前提准备 xff1a Ubuntu16 04 LTS 安装ROS kinetic 题外话 xff1a 如果连的是有IPV6的校园网 xff0c 在update时可能会访问IPV6地址出错 xff0c
  • PX4-Gazebo仿真学习笔记

    PX4 Gazebo仿真 xff1a http bbs amovauto com forum php mod 61 viewthread amp tid 61 486 amp extra 61 page 3D1 Simulator仿真器 x
  • C语言strtok函数

    1 strtok 语法 include lt string h gt char strtok char str const char delimiters 参数 xff1a str xff0c 待分割的字符串 xff08 c string
  • 终于把大数据类产品全流程解释清楚了

    你点开这文章 xff0c 说明你清晰知道了数据才是一切的基础 人工智能 机器学习 大数据等应用的基础都是基于这样的一个流程 xff0c 只是说运用领域不同 xff0c 那么偏重点不同 本文从数据采集到数据报告 xff0c 详细说明了大数据运
  • 关于slam

    什么是SLAM 机器人在未知环境中 xff0c 要实现智能化需要完成三个任务 xff0c 第一个是定位 Localization xff0c 第二个是建图 Mapping xff0c 第三个则是随后的路径规划 Navigation 之前地平
  • Linux(Ubuntu系统)同网段SSH连接不上,网络能ping通

    问题描述 测试以下命令同样连接不上 span class token function ssh span localhost 问题原因 Ubuntu系统自带 openssh client xff0c 但是没有自带 openssh serve
  • 本地进程间通信(二)--套接字socket

    目录 一 什么是Socket xff1f 二 socket通信流程 Server端 一 创建socket 二 命名socket 三 绑定 四 监听 五 关闭 Client端 一 创建socket 二 connect 三 发送数据 四 关闭s
  • debain服务器搭建之虚拟机安装(一)

    debain服务器虚拟机搭建系列 xff08 一 xff09 xff08 一 xff09 下载debain系统 xff08 二 xff09 搜索下载安装 vmware xff08 三 xff09 开始安装debain系统 xff08 四 x
  • 企业私有云技术设计方案

    1 概述 1 1 文档内容 本文档为某企业私有云技术路线设计文档 1 2 背景描述 1 2 1 某企业私有云业务线规划 近些年由于国内IDC市场发展迅速 xff0c 某企业从战略层面考虑 xff0c 建造了自己的高等级数据中心 xff0c
  • Qt的主窗口背景设置

    主界面设置背景一般有设置背景图片和背景颜色的需求 xff0c 其实二者之间设置方法类似 目录 主界面设置背景一般有设置背景图片和背景颜色的需求 xff0c 其实二者之间设置方法类似 方法一 xff1a 最简单的方式是通过ui界面来设置 xf
  • 7.使用码云

    使用GitHub时 xff0c 国内的用户经常遇到的问题是访问速度太慢 xff0c 有时候还会出现无法连接的情况 xff08 原因你懂的 xff09 如果我们希望体验Git飞一般的速度 xff0c 可以使用国内的Git托管服务 码云 xff
  • git diff命令之后,如何退出

    git diff命令是对比两次文件修改了什么 但如何退出呢 xff1f 输入q 按enter键盘
  • Float类型出现舍入误差的原因

    首先是float累加产生误差的原因 xff0c 该部分转自 xff1a http blog csdn net zhrh0096 article details 38589067 1 浮点数IEEE 754表示方法 要搞清楚float累加为什
  • React之antd Form回显数据

    转自 xff1a https blog csdn net welkin qing article details 110004969 文章目录 一 antd4如何回显数据 1 定义变量2 保存接口数据到form变量中3 form显示数据4
  • equals()方法和hashCode()方法

    1 hashCode 简介 该方法主要是利用一定的规则生成对象的哈希码 xff0c 也称散列码 它是是由对象导出的一个整数值 xff0c 是没有规律的 关于hashCode 使用的哈希算法 xff0c 越糟糕的哈希算法越容易产生哈希碰撞 产
  • 手把手教你基于STM32的BootLoader的OTA远程升级

    本文系21ic论坛蓝V作者小叶三千原创撰写 上次发过SD卡的Bootloader离线升级后 xff0c 应大家的要求 xff0c 这次就讲一下STM32的OTA远程升级 OTA又叫空中下载技术 xff0c 是通过移动通信的空中接口实现对移动
  • 转知乎,感觉非常棒,适合普通人c++学习路线图

    作者 xff1a 刘凯新 链接 xff1a https www zhihu com question 23447320 answer 39322848 来源 xff1a 知乎 著作权归作者所有 商业转载请联系作者获得授权 xff0c 非商业