深入《C++ Core Guidelines解析》:提升C++编程实践的关键指南

在这里插入图片描述

目录

  • 1、写在前面
  • 2、推荐理由
  • 3、内容介绍
  • 4、作者介绍
  • 5、赠书 or 购买


1、写在前面

在这里插入图片描述

C++ Core Guidelines是一个正在进行的开源项目,通过将广泛认可的现代C++上佳实践集中在一个地方来解决这些问题。Core Guidelines依赖于几十年的经验和早期的编码规则。它们与C++本身共享一个概念框架,重点是类型安全、资源安全以及消除可避免的复杂性和低效率。发起Core Guidelines的主要目的是解决已知的问题领域,同时使静态分析器能够实施。而《C++ Core Guidelines解析》由C++ 专家讲师 Rainer Grimm提炼出了Core Guidelines中的精髓,去除了晦涩难懂的内容,分享了新的见解和背景,并提供了自己培训课程中经过充分测试的示例

2、推荐理由

  1. 我一直认为学习语言不应该只停留在语法层面,应该深入了解框架和一些思想,而 Core Guidelines聚焦于一些相对高层次的问题,例如接口、资源管理、内存管理以及并发等,可以帮助我们提升思想高度,学习业界行之有效的架构设计思想和理念,所以读一读这本书还是很有必要的
  2. 通俗易懂,案例详细:本书提供了丰富的代码示例和解析,帮助读者更好地理解每个指导原则在实际编码中的应用。这些示例涵盖了各个方面,从编码风格到内存管理、并发编程等
  3. C++ 核心指南是按参考书的方式来组织的。它不是教程,不方便通过从头到尾的顺序阅读来学习如何用好现代 C++,不过本书对C++ Core Guidelines进行了详尽解读,涵盖了每个章节的主要内容和指导原则。读者可以全面了解C++ Core Guidelines的核心思想和实践要点。

3、内容介绍

本书共20个章节

  • 第一章—简介:介绍了本书的目标读者群、目的、非目的、结构和主要部分。
  • 第二章—理念:讨论了C++编程指导原则的理念以及为什么应该遵循这些指导原则。
  • 第三章—接口:重点讨论了构建良好接口的重要性,包括避免使用非 const 全局变量、依赖注入的应用、接口设计等。
  • 第四章—函数:涵盖了函数定义的规则、参数传递的最佳实践、返回值语义等各方面。
  • 第五章—类和类层次结构:介绍了如何设计好的类和类层次结构,包括构造函数、赋值运算符、析构函数、重载和运算符重载。
  • 第六章—枚举:讨论了枚举类型的使用和相关规则。
  • 第七章—资源管理:强调了内存分配和释放的规则,包括智能指针的使用。
  • 第八章—表达式和语句:涵盖了声明、表达式、语句和算术的最佳实践。
  • 第九章—性能:讨论了常见的性能优化错误和如何正确地进行优化。
  • 第十章—并发:介绍了并发和并行编程的基本概念,并讨论了消息传递和无锁编程等技术。
  • 第十一章—错误处理:讨论了设计和实现错误处理机制的最佳实践,包括异常处理和错误处理规则。
  • 第十二章—常量和不可变性:讲解了使用 const 和 constexpr 的规则和最佳实践。
  • 第十三章—模板和泛型编程:涵盖了模板和泛型编程的相关规则和技巧。
  • 第十四章— C 风格编程:讨论了使用C风格的编程的情况下的最佳实践。
  • 第十五章—源文件:探讨了处理接口和实现文件、命名空间的规则。
  • 第十六章—标准库:讨论了C++标准库中容器、文本、输入输出等部分的最佳实践。
  • 第十七章—架构观念:介绍了一些关于架构设计的思考方式和原则。
  • 第十八章—伪规则和误解:澄清了一些常见的误解和伪规则。
  • 第十九章—规格配置:讨论了Pro.type、Pro.bounds、Pro.lifetime等规格配置的使用。
  • 第二十章—Guidelines 支持库:介绍了一些Guidelines支持库中的视图、所有权指针、断言和实用工具。

附录部分包括施行C++ Core Guidelines、概念和契约等内容。

4、作者介绍

Rainer Grimm 自 1999 年以来担任了软件架构师、团队主管和教练,并从 2002 年开始举办 C++、Python 和专有软件的培训班。作为独立培训讲师,他在编程会议上演讲,每周用英语和德语写博客,并撰写了数本关于现代 C++ 和并发的书籍。

译者是吴咏炜、何荣华、张云潮、杨文波。

5、赠书 or 购买

购买链接:《C++ Core Guidelines解析》

购书传送门:https://u.jd.com/v8zuKlc
京东领券地址(无门槛优惠券10元):
APP:https://pro.m.jd.com/mall/active/2Z3HoZGKy5i9aEpmoTUZnmcoAhHg/index.html
PC:https://pro.jd.com/mall/active/2Z3HoZGKy5i9aEpmoTUZnmcoAhHg/index.html

如何参与赠书活动?

点击文章底部微信名片,参与朋友圈赠书活动,点赞8,18,28各送一本,包邮到家!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/75355.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构 每日一练:将带头结点的单链表就地逆置(视频讲解两种方法)

目录 方法一 算法视频分析 方法二 算法视频分析 Q:什么是“就地”捏? A:就是指辅助空间复杂度为O(1),通俗一点来说就是不需要再开辟一块空间来实现算法。 特别说明: 笔者第一次录制视频,言语有些不顺&…

MySQL——常见问题

NULL和空值的区别 1、空值不占空间,NULL值占空间。当字段不为NULL时,也可以插入空值。 2、当使用 IS NOT NULL 或者 IS NULL 时,只能查出字段中没有不为NULL的或者为 NULL 的,不能查出空值。 3、判断NULL 用IS NULL 或者 is no…

Win10 ping 虚拟机kali 请求超时解决办法

出现这种问题应该是windows休眠导致的 这里我的解决方法是先禁用再启用连接 然后再ping 虚拟机ip和kali ip,发现就可以连上了

vue前后端端口不一致解决方案

在config index.js文件中 引入如下代码即可 const path require(path) const devEnv require(./dev.env) module.exports {dev: {// PathsassetsSubDirectory: static,assetsPublicPath: /,proxyTable: devEnv.OPEN_PROXY false ? {} : {/api: {target: http://localhos…

工作和生活中,如何用项目管理思维解决复杂的事情?

在工作和生活中,许多事情都可以采用项目思维方式来解决。当我们逐渐将工作和生活中的各种事务以项目的方式来处理和推进时,我们可能并没有意识到,实际上我们正在运用项目管理思维。 项目管理思维能帮助我们在面对繁杂事务时,理清…

PY32F003F18按键输入

一、PY32F003F18的GPIO介绍 1、PY32F003F18的18个I/O,均可作为外部中断; 2、每个GPIO都可以由软件配置为输出: 1)、推挽输出(push-pull) 2)、开漏极输出(open drain) 注意:驱动电流为8mA; 3、每个GPIO都可以由软件配置为输入: 1)、…

ERP辅助报价助力提高效率和准确性

一、ERP辅助报价的定义: ERP辅助报价是指通过企业资源计划系统提供的功能和工具,辅助企业进行报价流程的管理和执行。它涵盖了报价数据的收集、计算、分析和生成报价文件的全过程,以提高报价的准确性、效率和一致性。 二、ERP辅助报价的重要…

LeetCode:2. 两数之和

这个解题思路来自代码随想录&#xff1a;代码随想录 (programmercarl.com) class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {std::unordered_map <int,int> map;for(int i 0; i < nums.size(); i) {// 遍历当前元素&am…

若依前端vue设置子路径

若依前端vue设置子路径 说明&#xff1a;本文档中以前后端分离版为例&#xff0c;版本为:3.8.6 一设置变量 在.env.development和.env.production 中定义一个变量如VUE_APP_PROJECT_IDENTIFIER # 项目标识字符 VUE_APP_PROJECT_IDENTIFIER admin二引用路径变量 ${process…

mysql trace

optimizer_trace 它可以跟踪优化器做出的各种决策&#xff08;比如访问表的方法、各种开销计算、各种转换等&#xff09;&#xff0c;并将跟踪结果记录到 information_schema 数据库中的 optimizer_trace 表中。 mysql 默认是关闭 追踪的 开启、并设置格式为 josn,同时设置trac…

数电课程设计

为了帮助大家更好学习FPGA硬件语言&#xff0c;创立此资源 包含文件有&#xff1a;实验报告、仿真文件&#xff0c;资料很全&#xff0c;有问题可以私信 课设一&#xff1a;加减计数器 一、实验内容 1、利用QuartusII和Modelsim实现100进制可逆计数器编码显示实验。 二、实…

【HttpRunnerManager】搭建接口自动化测试平台操作流程

一、需要准备的知识点 1. linux: 安装 python3、nginx 安装和配置、mysql 安装和配置 2. python: django 配置、uwsgi 配置 二、我搭建的环境 1. Centos7 &#xff08;配置 rabbitmq、mysql 、Supervisord&#xff09; 2. python 3.6.8 &#xff08;配置 django、uwsgi&am…

解决本地jar包导入maven

1、确定是否安装maven 2、输入导入命令 命令说明 <path-to-file>为你jar包所在的路径&#xff08;尽量简单并且不要含中文&#xff09; <group-id>为grouId号&#xff0c;与<artifact-id>组成唯一识别你jar包的坐标&#xff0c;当不在公共资源jar包中&#…

git撤销还未push的的提交

怎样撤销掉上图中的提交呢 使用以下代码即可提交 git reset --soft HEAD^

MyBatis-Plus学习笔记总结

一、查询 构造器分为QueryWrapper和LambdaQueryWrapper 创建实体类User package com.system.mybatisplus.model;import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.…

postman返回值乱码

描述&#xff1a; 在使用postman测试接口的时候&#xff0c;结果正常返回&#xff0c;但是乱码了&#xff0c;这个一般都是编码集设定的问题,后端接口是使用的springmvc Controller public class TestController(){RequestMapper("/test8")ResponseBodypublic Strin…

PHP8的多维数组-PHP8知识详解

今天分享的是php8的数组中的多维数组&#xff0c;主要内容有&#xff1a;多维数组的概念、创建和输出二维数组、创建和输出三维数组。 1、多维数组的概念 多维数组是包含一个或多个数组的数组。在多维数组中&#xff0c;主数组中的每一个元素也可以是一个数组&#xff0c;子数…

数字孪生的深海迷航

上世纪70年代&#xff0c;美国宇航局&#xff08;NASA&#xff09;筹划构建复杂的大型载人航天器。当时科学家们发现&#xff0c;航天任务进行当中&#xff0c;航天器的维护和修理面临着环境复杂、危险性高、故障不易排查等问题。 与其“盲人摸象”式的找故障&#xff0c;不如干…

浅析目标检测入门算法:YOLOv1,SSD,YOLOv2,YOLOv3,CenterNet,EfficientDet,YOLOv4

本文致力于让读者对以下这些模型的创新点和设计思想有一个大体的认识&#xff0c;从而知晓YOLOv1到YOLOv4的发展源流和历史演进&#xff0c;进而对目标检测技术有更为宏观和深入的认知。本文讲解的模型包括&#xff1a;YOLOv1,SSD,YOLOv2,YOLOv3,CenterNet,EfficientDet,YOLOv4…

用户体验设计师是什么,一篇文章读懂!

我是设计师l1m0&#xff0c;今天要给大家分享一个有趣的职业&#xff1a;UX设计师。 在我们日常生活中&#xff0c;我们无时无刻都在与产品发生交互行为&#xff0c;例如使用应用APP、访问网站、与实体陈燕萍进行交互&#xff08;例如试穿衣服&#xff09;或者享受某个服务&am…