《Effective C++》知识点(1)--让自己习惯C++
多年前看过的这本书(侯捷翻译的),忘得差不多了,重温复习一下。
1. 视C++为一个语言联邦
C++并不只是一个带有一组守则的一体语言;它是从四个次语言组成的联邦(federation)政府,每个次语言都有自己的规约。
次语言 | 说明 |
C | C是C++的基础,C++对问题的解法其实是较高级的C解法 |
Object-Oriented C++ | C with classes,面向对象设计的实施 |
Template C++ | C++范型编程,模板元编程TMP |
STL | template程序库 |
2. 尽量以 const, enum, inline替换 #define
#define的变量是由预处理器处理的,编译器不知道它的存在。
2.1 对于单纯常量,最好以const对象或enum替换#define。enum比较像#define,取enum地址是不合法的,建议优先使用。
2.2 对于形似函数的宏,最好改用inline函数替换#define。inline函数遵守作用域和访问规则。
3. 尽可能使用const
将某些东西声明为const可帮助编译器侦测出错误用法。const可被施加于任何作用域内的对象、函数参数、函数返回类型、成员函数本体。
3.1 如果关键字const出现在星号左边,表示被指物是常量;如果出现在星号右边,表示指针本身是常量。
3.2 令函数返回一个常量值(常量对象),可以降低因客户错误而造成的意外,而又保持安全性和高效性。
3.3 编译器强制实施物理常量性(bitwise constness),但编写程序时应该使用"概念上的常量性"即逻辑常量性。const成员函数承诺绝不改变其对象的逻辑状态。如果成员变量在const成员函数内总是可被更改的,可以用mutable修饰。
3.4 当const和non-const成员函数有着实质等价的实现时,另non-const版本调用const版本可以避免代码重复。先用static_cast将*this转为const对象调用const成员函数,再用const_cast移除调用返回的const修饰。
4. 确定对象在使用前已被初始化
永远在使用对象之前先将它初始化。确保每一个构造函数都将对象的每一个成员初始化。
4.1 为内置型对象进行手工初始化,因为C++不保证初始化它们。这点和Java很不一样。
4.2 构造函数最好使用成员初始化列表,而不要在构造函数体内使用赋值操作。class的成员变量总是以其声明的次序被初始化的。初始化列表列出的成员变量,其顺序应该与它们在class中声明的次序相同,避免使人迷惑。
4.3 为避免"跨编译单元之初始化次序"问题,请用local static对象替换non-local static对象。
所谓编译单元是指产出单一目标文件的源码,基本上是一个cpp文件加上其所包含的头文件。C++对"定义于不同编译单元内的non-local static对象"的初始化顺序没有明确的定义。但是C++保证,函数内的local static对象会在"该对象被调用期间"首次遇上该对象定义式时被初始化。所以请优先使用局部静态对象函数,而不是全局静态对象,可以避免依赖的静态对象未被初始化的情况。
相关文章:
《Effective C++》知识点(1)--让自己习惯C++
多年前看过的这本书(侯捷翻译的),忘得差不多了,重温复习一下。 1. 视C为一个语言联邦 C并不只是一个带有一组守则的一体语言;它是从四个次语言组成的联邦(federation)政府,每个次语言都有自己的规约。 次语言说明CC是C的基础&am…...

UVM 验证方法学之interface学习系列文章(八)《interface不小心引入X态问题》
前面的文章学习,想必大家都对interface 有了深入了解。大家可不要骄傲哦,俗话说:小心驶得万年船。今天,再给大家介绍一个工作中,不是经常遇到,但是一旦遇到,会让你纠结很久的事情。 前面文章提到,随着验证复杂度的不断增加,interface 的bind 的操作,是必不可少的用法…...
BBR算法的几种状态
BBR(Bottleneck Bandwidth and Round-trip propagation time)算法根据互联网的拥塞行为定义了四种状态:STARTUP、DRAIN、PROBE_BW和PROBE_RTT。下面对每种状态进行详细解释,并说明它们之间的区别: STARTUP(…...
利用jupyter进行分类
Jupyter Notebook是一个非常强大的工具,可以用于各种数据分析和机器学习任务,包括分类问题。在Jupyter Notebook中进行分类通常需要以下步骤: 导入所需的库:首先,你需要导入必要的Python库,例如NumPy、Pand…...

【LeetCode 算法专题突破】滑动窗口(⭐)
文章目录 前言1. 长度最小的子数组题目描述代码 2. 无重复字符的最长子串题目描述代码 3. 最大连续1的个数 III题目描述代码 4. 将 x 减到 0 的最小操作数题目描述代码 5. 水果成篮题目描述代码 6. 找到字符串中所有字母异位词题目描述代码 7. 串联所有单词的子串题目描述代码 …...

按键中断控制LED灯亮灭
EXTI—外部中断/事件控制器 EXTI(External interrupt/event controller)—外部中断/事件控制器,管理了控制器的 20 个中断/事 件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的 检测。EXTI可…...

YOLOV8目标检测——模型训练
文章目录 1下载yolov8([网址](https://github.com/ultralytics/ultralytics))2用pycharm打开文件3训练自己的YOLOV8数据集4run下运行完了之后没有best.pt文件5导出为onnx文件 本章内容主要解决如何训练自己的YOLOV8模型。 1下载yolov8(网址&a…...
利用dockerfile升级flink的curl
最近Nusses扫出flink镜像有CURL漏洞,才发现要更新到最新版本 8.4.0,笔者当时flink版本为: flink:1.17.1-scala_2.12-java8 官方镜像仓库:https://hub.docker.com/_/flinkapt源 我试了如上2种方法,都不能更新curl到8…...

element 日期选择器禁止选择指定日期前后时间
画圈重点:disabledDate的写法要用箭头函数,不能用普通函数写法,否则this指向就错了,会报 undefined <el-date-picker v-model"time" type"date" value-format"yyyy-MM-dd" :…...

00TD时尚女童睡衣,蕾丝边+蝴蝶结太好看了
甜美又可爱的蕾丝花边加蝴蝶结 真的一下子戳中了我的心巴, 满满的少女风真的很好看, 妥妥的可爱小公主一枚 柔软又亲肤,厚厚的很保暖 睡觉真的很舒服 还有袖口和裤脚都做了松紧设计哟!...
网络基础知识点
osi七层模型: 应用层:提供用户接口,与用户进行交互 表示层:进行数据格式的转换 会话层:建立、维护和验证会话 传输层:保证目标从源到目的地的传输(传输协议和端口号) 网络层&#x…...

力扣每日一题54:螺旋矩阵
题目描述: 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]示例 2: 输入&#…...

基于WebRTC的程序因虚拟内存不足导致闪退问题的排查以及解决办法的研究
目录 1、WebRTC简介 2、问题现象描述 3、将Windbg附加到目标进程上分析 3.1、Windbg没有附加到主程序进程上,没有感知到异常或中断 3.2、Windbg感知到了中断,中断在DebugBreak函数调用上 3.3、32位进程用户态虚拟地址和内核态虚拟地址的划分 …...
2023年9月青少年软件编程(C 语言) 等级考试试卷(三级)
2023年9月青少年软件编程(C 语言) 等级考试试卷(三级)含答案 1.谁是你的潜在朋友 题目描述 “臭味相投”——这是我们描述朋友时喜欢用的词汇。两个人是朋友通常意味着他们存在着许多共同的兴趣。然而作为一个宅男,你…...

用节点亲和性把 Pod 分配到节点
用节点亲和性把 Pod 分配到节点 当前集群信息: rootk8s-master:~# kubectl get node -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME k8s…...

GB28181学习(十)——视音频文件下载
要求 SIP服务器接收到媒体接收者发送的视音频文件下载请求后向媒体流发送者发送媒体文件下载命令,媒体流发送者采用RTP将视频流传输给媒体流接收者,媒体流接收者直接将视频流保存为媒体文件;媒体流接收者或SIP服务器可通过配置查询等方式获取…...

2023 年和 2024 年 10 个最佳加密货币趋势
1.熊市低迷 加密货币市场已进入持续数月的长期看跌阶段。尽管 2023 年初出现了一些看涨走势,但大多数领先的加密货币随后都出现了看跌低迷,导致其市值大幅下跌。 此外,持续的熊市可归因于一系列因素,包括宏观经济不确定性、利率…...
0026【Edabit ★☆☆☆☆☆】Convert Hours and Minutes into Seconds
0026【Edabit ★☆☆☆☆☆】Convert Hours and Minutes into Seconds language_fundamentals math Instructions Write a function that takes two integers (hours, minutes), converts them to seconds, and adds them. Examples convert(1, 3) // 3780 convert(2, 0) //…...

Java 枚举类
一、枚举类简介 1、枚举类概念 类的对象只有有限个且确定的,这种类称之为枚举类;因为在jdk1.5之前没有enum关键字来定义枚举类,只能采用class定义一个类然后将类做一些修改满足对象个数有限且确定,那么这种类就是枚举类…...

SQL sever中的存储过程
在Oracle的专篇中我也有仔细总结了存储过程的相关内容, 文章链接:http://t.csdnimg.cn/Z8AnH 尽管Oracle和SQL sever之间是存在一些区别,但许多基本的概念和原则在Oracle和SQL Server之间是通用的。它们之间有一些常见的区别,如下…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...