《Effective C++》读书笔记——第一章:Accustoming Yourself to C++

《Effective C++》 读书笔记(详细总结55条款)上篇 下面从四个方面来说 (1) C++ 以 C 为基础,很多语句语法都没有改变,只是进行了扩展,C++ 解决问题的时候,可以理解为 C 的高效解法 (2) 面向对象,有构造函数,析构函数,继承、封装、多态、虚函数动态绑定,这是不同于C 语言的部分 (3) 泛型编程、可以理解为代码的模型,但是代码本身并不占用内存空间,只有在实例化的时候,才分配内存,所以可以提高代码复用性 阅读详情

大年三十却不能回家,也不能找🐻玩,我恨死这个新型冠状病毒了
既然只能宅在家,那就充分利用一下这段时间多学习一点吧

言归正传,本章主要是在讲如何让自己适应C++,当然这也是全书所想要表达的,只是这一章着重讲一些基础


Item 1: View C++ as a federation of languages

特意去查了一下federation是什么意思,好像大概是说联盟、联邦之类的,所以这条item的意思其实是说,C++经过了长时间的发展,虽然最早是从“有对象的C语言”这一原型而来,但是现在已经是一门丰富而强大的语言,所以会包含很多种特性,开发者应当将C++看作几门子语言的集合。作者认为C++主要是以下四种子语言组成:

  • C
  • 面向对象的C++
  • 模板类C++
  • 标准库STL

这一点我确实是有所体会的,在工作时如果focus在用Qt开发各种UI,会觉得C++用起来还挺方便,看代码也没有特别难懂,都是一些业务代码,处理各种用户操作和设置样式等。往下看ViewModel的东西,就是一大堆数据结构和回调,如果再往下看一些service的代码,有时候就会碰到用C的风格写的一些底层的东西,看到一大堆下划线就会有点看不下去。还有一些通用的Util之类的会用到模板类,读起来也不太适应。

所以作者的建议就是根据不同的应用场景灵活切换使用策略,他举的例子也很好:我们都知道如果用内置类型作为参数(也就是C的风格),那么直接传递字面值会比传递引用要高效,但是如果用用户定义的对象作为参数(面向对象的C++),那么构造函数和析构函数的存在就意味着使用常值引用是更好的做法,这一点在模板类C++更是如此,因为你甚至无法提前知道传入的参数类型是什么。而当工作在STL时,由于迭代器和函数是用C的指针定义的,所以这个时候又应该沿用老的C风格的参数传递方式

总结:

C++的最佳实践规则会根据你使用的内容而变化


Item 2: Prefer consts, enums, and inlines to #defines

这一条其实之前有了解过,但是只知道最好用const替换#define,也没有很深入的研究过为什么要这样做。作者是这样解释的:
这一条item其实也可以解释为prefer编译器而不是预处理器,因为声明为const的变量会经过编译器的编译,而通过#define定义的常量往往经过预编译后可能不会再经过编译,这就导致可能程序员在debug时根本无法知道某个出现的常量是在哪里定义的,怎么来的。所以最好的方法就是用const替换#define来定义常量,这里作者还给出了两个需要特别注意的地方

  1. 定义指针常量。因为常量的定义通常是写在头文件中,这样可以供很多的文件引用它,所以在头文件中将指针定义为常量是很重要的,这一点在item3中会着重讲解
  2. 定义类的特定常量。如果要限制某个常量为只有一个类可以使用,就需要将它定义为类的成员,要保证只有一份拷贝,还需要将它定义为静态的:
c
读书笔记:《Effective Modern C++(C++14)》 使用RAII(“Resource Acquisition Is Initialization,资源获得即初始化)包装thread,在析构时进行join。和闭包类存在于编译期,闭包存在于运行时。 阅读详情

相关推荐

【绝版C++书籍】《Effective STL》读书笔记

《Effective STL》读书笔记写在前面《Effective STL》中可能过时的内容1 容器第1条:慎重选择容器类型。第2条:不要试图编写独立于容器类型的代码。第3条:确保容器中的对象拷贝正确而高效。第4条:调用empty而不是检查size()是否为0。第5条:区间成员函数优先于与之对应的单元素成员函数。第6条:当心C++编译器最烦人的分析机制。第7条:如果入容器中包含了通过new操作创建的指针,切记在容器对象析构前将delete掉。第8条:切勿创建包含auto_ptr的容器对象。第9条:慎重选择删

Elias_Liu的博客 1757

Android逆向实战:抖音聊天记录数据库解析与导出(附完整SQL查询)

本文提供了一份Android逆向实战指南,详细解析了抖音聊天记录数据库的结构与导出方法。通过定位核心的`im.db`数据库文件,深度解读conversation_list、msg等关键表结构,并附上完整的SQL查询语句,帮助开发者或研究人员安全、合规地提取和分析本地聊天数据,适用于移动安全研究与数据分析场景。

mango的博客 854

用Python+ArcGIS分析厦门共享单车数据:5分钟搞定订单时长与距离分布的可视化

本文详细介绍了如何利用Python和ArcGIS Pro 3.x快速分析厦门共享单车数据,实现订单时长与距离分布的可视化。通过数据清洗、预处理和高级可视化技巧,揭示用户行为特征,为运营优化提供数据支持。文章还提供了环境配置、代码示例和业务洞察,帮助开发者高效完成数据分析任务。

weixin_28327051的博客 336

【鼠标在不点击的情况下,直接移动到QT控件上不显示提示信息】

有时明明已经调用了setToolTips方法,鼠标移动到QT控件上仍然不会有提示信息,这时候就需要具体分析下。重点就是标红的这段话,大概意思就是。.h文件中加入鼠标移动事件的定义。.cpp文件中实现该事件。

ZTH_G的博客 2423

TCS34725颜色识别模块实战调校:从“一坨”例程到精准RGB

本文针对TCS34725颜色识别模块初始数据不准的问题,提供了从基础例程到精准调校的实战指南。核心在于通过白光校正与黑白光校正两种方法,补偿传感器偏差与环境光影响,将原始数据准确映射为标准RGB值。文章详细阐述了校准原理、操作步骤与代码实现,并分享了进阶调试技巧与避坑指南,帮助开发者显著提升颜色识别的准确性与项目可靠性。

weixin_29188043的博客 287

移动支付APP(仿支付宝)

Toast.makeText(PayActivity.this, "支付失败:" + payResponse.getMsg(), Toast.LENGTH_SHORT).show();Toast.makeText(PayActivity.this, "支付失败:" + t.getMessage(), Toast.LENGTH_SHORT).show();Toast.makeText(PayActivity.this, "支付失败", Toast.LENGTH_SHORT).show();

寒寒豆豆软件公司的博客 134

SAP 中租赁资产的实现需区分经营租赁与融资租赁,核心围绕资产主数据配置、折旧与利息设置、科目分配及业务操作展开

摘要:SAP系统租赁资产管理需区分经营租赁与融资租赁,通过SPRO配置资产主数据、折旧范围、利息计算及科目分配。关键步骤包括:激活折旧范围利息计算(OABZ)、设置租赁资产类别(OAYZ)、维护总账科目(AO90)及创建租赁资产主数据(AS01)。业务操作涵盖资产资本化(ABZON)、折旧利息过账(AFAB)、租金支付(F-53)及终止处理(ABUMN)。核心配置要点在于准确设置租赁类型、利率参数和科目联动,确保系统自动计算折旧与利息并生成正确凭证。

金牌架构师 1069

GibbsCAM软件二次开发:GibbsCAM软件API接口详解

API(Application Programming Interface,应用程序编程接口)是一种允许不同软件之间进行通信的接口。在GibbsCAM软件中,API提供了与外部程序交互的能力,使得开发者可以利用GibbsCAM的强大功能进行二次开发,定制化满足特定的制造需求。GibbsCAM的API主要基于.NET框架,使用C#或VB.NET等语言进行编程。在GibbsCAM软件中,通过API接口创建自定义几何形状是实现复杂零件设计和加工策略定制的关键步骤。

kkchenjj的博客 1494

PyTorch实战(25)——使用PyTorch构建DQN模型

深度Q网络 (Deep Q-learning Network, DQN) 在强化学习领域取得了巨大的成功和广泛的应用,PyTorch 结合 gymnasium 库为我们提供了强大的工具,支持在各种强化学习环境中测试不同类型的深度强化学习模型。在本节中,我们使用 PyTorch 框架构建使用卷积神经网络架构的 DQN 模型,模型通过自主学习掌握 Atari 经典游戏《Pong》的操作策略,最终实现击败电脑对手的竞技目标。

盼小辉丶的博客 3431

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

上一篇: 《Effective C++》读书笔记——写在开头
下一篇: 记工作中遇到的一个Qt tab order的古怪问题
mikucyy
博客等级 码龄9年 14粉丝 15原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值