当前位置: 首页 > news >正文

《Effective C++》读书纪实 -- 诸君同享

文章目录

《Effective C++》是一本经典的C++编程指南,共包含50条C++编程的最佳实践。

  1. 确定你的构造函数的行为
    在构造函数中,应该尽可能地避免调用虚函数、非静态成员函数和虚基类的函数。

  2. 尽量使用const、enum、inline替换#define
    使用const、enum、inline可以避免#define的一些问题,如类型不明确、无法调试等。

  3. 尽可能使用const
    使用const可以提高代码的可读性和安全性,同时也可以帮助编译器进行优化。

  4. 确定对象被使用前已被初始化
    在使用对象之前,应该确保它已经被初始化,否则可能会导致未定义的行为。

  5. 了解C++中的静态成员变量和静态成员函数
    静态成员变量和静态成员函数是属于类而不是对象的,可以用于实现单例模式等。

  6. 避免使用裸指针
    裸指针容易导致内存泄漏、空指针引用等问题,应该尽可能使用智能指针等RAII技术。

  7. 在返回对象时不要返回引用或指针
    返回对象时应该返回对象本身,而不是引用或指针,避免对象被意外修改或销毁。

  8. 确定函数的参数和返回值的类型
    函数的参数和返回值的类型应该尽可能地简单明了,避免使用复杂的类型或模板。

  9. 了解C++中的类型转换
    C++中有多种类型转换方式,如static_cast、dynamic_cast、reinterpret_cast等,应该根据具体情况选择合适的方式。

  10. 避免使用多重继承
    多重继承容易导致二义性、代码复杂度等问题,应该尽可能避免使用。

  11. 了解C++中的虚函数和多态
    虚函数和多态是C++中的重要特性,可以实现运行时多态性,但也需要注意一些细节。

  12. 确定拷贝构造函数和赋值操作符的行为
    拷贝构造函数和赋值操作符的行为应该符合预期,避免出现浅拷贝、内存泄漏等问题。

  13. 了解C++中的异常处理
    异常处理是C++中的重要特性,可以用于处理程序运行时的错误,但也需要注意一些细节。

  14. 确定函数的异常安全性
    函数的异常安全性应该尽可能高,即在函数抛出异常时也能保证程序的正确性和资源的释放。

  15. 了解C++中的模板
    模板是C++中的重要特性,可以实现泛型编程,但也需要注意一些细节。

  16. 避免在头文件中包含大量代码
    在头文件中包含大量代码会导致编译时间增加,应该尽可能将代码放在源文件中。

  17. 确定函数的参数是否应该是const引用
    函数的参数如果不需要修改,应该使用const引用,避免不必要的拷贝和修改。

  18. 了解C++中的STL
    STL是C++中的标准库,包含多种容器、算法和迭代器等,可以大大提高编程效率。

  19. 避免使用裸的new和delete
    裸的new和delete容易导致内存泄漏、空指针引用等问题,应该尽可能使用智能指针等RAII技术。

  20. 确定函数的返回值是否应该是const
    函数的返回值如果不需要修改,应该使用const,避免不必要的修改。

  21. 了解C++中的函数对象和Lambda表达式
    函数对象和Lambda表达式是C++中的重要特性,可以实现函数式编程,但也需要注意一些细节。

  22. 避免使用裸的数组
    裸的数组容易导致越界访问、内存泄漏等问题,应该尽可能使用STL容器等。

  23. 确定函数的参数是否应该是值传递
    函数的参数如果不需要修改,可以使用值传递,避免不必要的拷贝和修改。

  24. 了解C++中的智能指针
    智能指针是C++中的重要特性,可以自动管理内存,避免内存泄漏等问题。

  25. 避免使用裸的指针
    裸的指针容易导致内存泄漏、空指针引用等问题,应该尽可能使用智能指针等RAII技术。

  26. 确定函数的参数是否应该是指针
    函数的参数如果需要修改,可以使用指针,但需要注意指针的生命周期和空指针引用等问题。

  27. 了解C++中的函数重载和默认参数
    函数重载和默认参数是C++中的重要特性,可以提高代码的可读性和灵活性。

  28. 避免使用裸的指针作为函数参数
    裸的指针作为函数参数容易导致内存泄漏、空指针引用等问题,应该尽可能使用智能指针等RAII技术。

  29. 确定函数的参数是否应该是引用
    函数的参数如果需要修改,可以使用引用,避免不必要的拷贝和修改。

  30. 了解C++中的类型推导
    C++11引入了类型推导,可以自动推导变量的类型,提高代码的可读性和灵活性。

  31. 避免使用裸的指针作为返回值
    裸的指针作为返回值容易导致内存泄漏、空指针引用等问题,应该尽可能使用智能指针等RAII技术。

  32. 确定函数的返回值是否应该是引用
    函数的返回值如果需要修改,可以使用引用,避免不必要的拷贝和修改。

  33. 了解C++中的移动语义和右值引用
    C++11引入了移动语义和右值引用,可以提高代码的效率和灵活性。

  34. 避免使用裸的指针作为成员变量
    裸的指针作为成员变量容易导致内存泄漏、空指针引用等问题,应该尽可能使用智能指针等RAII技术。

  35. 确定成员函数是否应该是const成员函数
    成员函数如果不需要修改对象的状态,应该声明为const成员函数,避免不必要的拷贝和修改。

  36. 确定函数的参数是否应该是右值引用
    函数的参数如果需要修改或转移对象的所有权,可以使用右值引用,提高代码的效率和灵活性。

  37. 了解C++中的并发编程
    并发编程是C++中的重要特性,可以实现多线程、异步编程等,但也需要注意一些细节。

  38. 确定函数的返回值是否应该是右值引用
    函数的返回值如果是临时对象或需要转移对象的所有权,可以使用右值引用,提高代码的效率和灵活性。

  39. 了解C++中的Lambda表达式的捕获方式
    Lambda表达式可以捕获外部变量,但需要注意捕获方式的影响和生命周期等问题。

  40. 确定函数的参数是否应该是Universal Reference
    Universal Reference是C++中的重要特性,可以实现完美转发,提高代码的灵活性和效率。

  41. 了解C++中的类型萃取
    类型萃取是C++中的重要特性,可以在编译期获取类型信息,提高代码的可读性和灵活性。

  42. 确定函数的参数是否应该是Initializer List
    Initializer List是C++11引入的重要特性,可以方便地初始化容器、数组等,提高代码的可读性和灵活性。

  43. 了解C++中的委托构造函数
    委托构造函数是C++11引入的重要特性,可以简化构造函数的实现,提高代码的可读性和灵活性。

  44. 确定函数的参数是否应该是Variadic Template
    Variadic Template是C++11引入的重要特性,可以实现可变参数模板,提高代码的灵活性和效率。

  45. 了解C++中的模板元编程
    模板元编程是C++中的重要特性,可以在编译期进行计算和类型推导,提高代码的效率和灵活性。

  46. 确定函数的参数是否应该是Function Object
    Function Object是C++中的重要特性,可以实现函数式编程,提高代码的可读性和灵活性。

  47. 了解C++中的类型别名和别名模板
    类型别名和别名模板是C++11引入的重要特性,可以简化类型定义,提高代码的可读性和灵活性。

  48. 确定函数的参数是否应该是std::initializer_list
    std::initializer_list是C++11引入的重要特性,可以方便地初始化容器、数组等,提高代码的可读性和灵活性。

  49. 了解C++中的constexpr和常量表达式
    constexpr和常量表达式是C++11引入的重要特性,可以在编译期进行计算和类型推导,提高代码的效率和灵活性。

  50. 确定函数的参数是否应该是std::function
    std::function是C++11引入的重要特性,可以实现函数对象的类型擦除,提高代码的灵活性和可读性。

以上是《Effective C++》中的全部50条内容,这些内容涵盖了C++编程的方方面面,对于提高C++编程的效率、可读性和安全性都有很大的帮助。

相关文章:

《Effective C++》读书纪实 -- 诸君同享

文章目录《Effective C》是一本经典的C编程指南,共包含50条C编程的最佳实践。 确定你的构造函数的行为 在构造函数中,应该尽可能地避免调用虚函数、非静态成员函数和虚基类的函数。 尽量使用const、enum、inline替换#define 使用const、enum、inline可以…...

【云原生】K8S-ConfigMap 实现应用和配置分离

文章目录前言ConfigMap 背景ConfigMap 创建方式ConfigMap 的使用使用 ConfigMap 的注意事项总结前言 Kubernetes 是目前最流行的容器编排系统之一,它提供了丰富的功能来支持容器化应用程序的管理和部署。 ConfigMap 是 Kubernetes 中重要的资源对象,用…...

java -测距工具(经纬度)

代码 /*** 测距工具* author qb*/ public class DistanceUtils {/*** 赤道半径*/private static final double EARTH_RADIUS 6378.137;private static double rad(double d) {return d * Math.PI / 180.0;}/*** Description : 通过经纬度获取距离(单位:米)* Group…...

postgres分区表的创建-基于继承

参考文档: http://postgres.cn/docs/12/ddl-partitioning.html 创建基于继承的分区表的步骤 1 创建父表 2 创建子表,从父表继承过来 3 创建函数及触发器,使插入的数据根据规则,插入到对应的子表中 -- 创建父表 CREATE TABLE a…...

Docker应用部署

文章目录Docker 应用部署一、部署MySQL二、部署Tomcat三、部署Nginx四、部署RedisDocker 应用部署 一、部署MySQL 搜索mysql镜像 docker search mysql拉取mysql镜像 docker pull mysql:5.6创建容器,设置端口映射、目录映射 # 在/root目录下创建mysql目录用于存…...

使用golang实现日志收集系统的logagent

整体架构 参考 七米老师的日志收集项目 主要用go实现logagent的部分,logagent的作用主要是实时监控日志追加的变化,并将变化发送到kafka中。 之前我们已经实现了 用go连接kafka并向其中发送数据,也实现了使用tail库监控日志追加操作。 我们…...

小红书点赞不显示怎么回事?小红书笔记评论被吞怎么办

小红书作为一个互联网产品,是一个软件。既然是软件就会有一定的程序漏洞,这是无法避免的。但是很多时候其实并不一定是漏洞的问题。今天就来和大家谈谈小红书点赞不显示怎么回事,小红书评论被吞又是怎么一回事,这些难道都是程序性…...

地址变换和缺页置换习题

1.设某进程页面的访问序列为4,3,2,1,4,3,5,4,3,2,1,5,当分配给该进程的内存页框数分别为3和4时,对于先进先出,最近最少使用,最佳页面置换算法,分别发生多少次缺页中断? 答: 分配的…...

PAT 乙级 1010 一元多项式求导(解题思路+AC代码)

题目: 设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为nxn−1。) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分…...

一维河流污染持续排放模拟(水污染扩散)

一、处理河道转换为geojson数据 以淮河为例处理示例数据: {"type": "FeatureCollection","features": [{"geometry": {"coordinates": [[[115.5803,34.4982],[115.5922,34.498],[115.6061,34.4994],[115.6203,…...

数据优化 | CnOpenDataA股上市公司招聘数据

就业是经济的“晴雨表”,更是社会的“稳定器”。稳定和扩大就业一直是国家宏观调控的重要目标,2021年中央经济工作会议八次提到“就业”这一关键词。在新冠肺炎疫情蔓延、世界经济下行及人口老龄化加快等多重因素的叠加之下,稳就业保民生成为…...

nacos和eureka的区别

nacos和eureka的区别 Eureka是什么 Eureka详解Nacos是什么 Nacos详解Nacos和Eureka的区别 CAP理论连接方式服务异常剔除操作实例方式自我保护机制 Eureka是什么 Eureka 是Spring Cloud 微服务框架默认的也是推荐的服务注册中心,由Netflix公司与2012将其开源出来,Eureka基于RE…...

canvas.toDataURL生成图片报错的解决方案

问题原因: toDataURL方法存在跨域限制,如果执行时dom内含有跨域的图片则浏览器执行时会报错。 这个根据不同的系统有不同的表现,例如:生成完毕但控制台有warning类型的警告,或者直接异常报error。 解决思路&#xff…...

电容笔和Apple pencil的区别是什么?好用电容笔推荐

Apple Pencil与目前市场上常见的电容笔最大的不同之处在于,普通电容笔并不具备苹果Pencil特有的重力压感,而仅仅是一种倾斜的压感。不过,其在其它方面的表现也很出色,与Apple Pencil相似,而且价格仅为200元。现在&…...

关于onnx 转ncnn 的问题

文章目录修改模型Detect层设计转换后处理优质文章由于有些操作是没法支持的 如5维的操作: Unsupported slice axes ! Unsupported slice axes ! Unsupported slice axes ! Unsupported slice axes ! Unsupported slice axes ! Unsupported slice axes !参考&#…...

设计模式之《责任链模式》

------《责任链模式》责任链模式的概念为什么用责任链模式工作中用在哪里设计思路代码实现总结责任链模式的概念 责任链模式是一种行为型设计模式,它允许你将请求沿着处理链传递,直到有一个处理者能够处理该请求为止。 在责任链模式中,每个…...

Android Studio实现多功能日记本

项目目录一、项目概述二、系统特点三、开发环境四、详细设计1、E-R图2、数据库3、系统设置五、运行演示一、项目概述 本次实现了功能实用且齐全的日记本,界面友好,使用便捷,采用MVC架构设计。使用SQLite数据库存储数据,数据表有主…...

只依赖Tensorrt和opencv的yolov5源代码

simple_yolo.hpp #ifndef SIMPLE_YOLO_HPP #define SIMPLE_YOLO_HPP/*简单的yolo接口&#xff0c;容易集成但是高性能 */#include <vector> #include <memory> #include <string> #include <future> #include <opencv2/opencv.hpp>namespace Si…...

多路I/O转接 poll(了解)

poll() 的机制与 select() 类似&#xff0c;与 select() 在本质上没有多大差别&#xff0c;管理多个描述符也是进行轮询&#xff0c;根据描述符的状态进行处理&#xff0c;但是 poll() 没有最大文件描述符数量的限制&#xff08;但是数量过大后性能也是会下降&#xff09;。 p…...

听说你也在为配置tomcat server而烦恼,看我这一篇,让你醍醐灌顶!

一.通过maven创建项目 二.下载tomcat服务器 我们一般在tomcat官网中进行tomcat的下载 Apache Tomcat - Welcome! 三.添加配置&#xff1a;我们点击下图中的文件配置 四.测试配置的tomcat 我们在文件的body中输入 测试内容&#xff1a; 在控制台中显式tomcat运行的信息&#…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...