《C++编程规范》读书笔记(下)

(完整版)从零开始教你玩转ComfyUI-保姆级部署教程-手把手带你ComfyUI工作流搭建 ComfyUI就像拥有一支神奇魔杖,可以轻松创造出令人惊叹的AI生成艺术。从本质上讲,ComfyUI是构建在Stable Diffusion之上的基于节点的图形用户界面(GUI),而Stable Diffusion是一种最先进的深度学习模型,可以根据文本描述生成图像。但ComfyUI真正特别之处在于,它如何让像你这样的艺术家释放创造力,将你最疯狂的想法变为现实。想象一下有一块数字画布,你可以通过连接不同的节点来构建自己独特的图像生成工作流,每个节点代表一个特定的功能或操作。 阅读详情

《C++编程规范——101条规则、准则与最佳实践》(C++ Coding Standards——101 Rules, Guidelines and Best Practices)

名字空间与模块

第57条(D):将类型及其非成员函数接口置于同一名字空间中

第58条(D):应该将类型和函数分别置于不同的名字空间中,除非有意想让他们一起工作

       ADL(参数依赖查找,也成Koeing查找)。

      关于57条和58条,在机器上实验了一下,没发现啥问题呀。???

第59条(A):不要在头文件中或者#include之前编写名字空间using

       名字空间 using 是为了使我们更方便,而不是让我们用来叨扰别人的:在 #include 之前,绝对不要编写 using 声明或者 using 指令。
       推论:在头文件中,不要编写名字空间级的 using 指令或者 using 声明,相反应该显式地用名字空间限定所有的名字。(第二条规则是从第一条直接得出的,因为头文件无法知道以后其他头文件会出现什么样的 #include 。) 简而言之:可以而且应该在实现文件中的 #include 指令之后自由地使用名字空间级的 using 声明和指令,而且会感觉良好。
第60条(D):要避免在不同的模块中分配和释放内存

第61条(A):不要在头文件中定义具有链接的实体

// 不要在头文件中定义具有外部链接的实体
int fudgeFactor;
std::string hello("hi, lcz");
void foo() { std::cout << "lcz" << std::endl; }


而解决方法也很简单,应该像如下只在头文件中声明:

extern int fudgeFactor;
extern std::string hello;
void foo(); // extern 对函数的声明是可有可无的


在实现文件中定义:

int fudgeFactor;
std::string hello("hi, lcz");
void foo() { std::cout << "lcz" << std::endl; }


同样的,以下在头文件中定义名字空间级的static实体是更危险的行为(因为链接器通常不会报错):

static int fudgeFactor;
static std::string hello("hi, lcz");
static void foo() { std::cout << "lcz" << std::endl; }


第62条:不要允许异常跨越模块边界传播

第63条(D):在模块的接口中使用具有良好可移植性的类型

错误处理与异常

第68条(B):广泛地使用断言记录内部假设和不变式

     断言的强大怎么高估都不算过分。1)按照信息论的原理,一个事件中所包含的信息量与该事件发生的概率是成反比的。因此,如果assert触发的可能性越低,它触发时所提供的信息量就越大。2)避免使用assert(false),应该使用assert( !"information message" ); // 这样有一个很有用的好处,可以取代注释。3)断言是用来报告程序员的错误的,因此,不要使用断言报告运行时的错误。

第69条:建立合理的错误处理策略,并严格遵守

第70条:区别错误与非错误

第71条:设计和编写错误安全代码

第72条:优先使用异常报告错误

第73条:通过值抛出,通过引用捕获

第74条:正确地报告、处理和转换错误

第75条:避免使用异常规范

    错误处理与异常这一块在项目中实践得很肤浅,没有什么心得与体会。一般都是遇到错误了即返回,抛出错误日志。

类型安全

第90条(C):避免使用类型分支,多使用多态

第91条(C):依赖类型,而非其表示方式

第92条(A):避免使用reinterpret_cast

     如果需要在不相关的指针类型之间强制转换,应该通过void进行转换,不要直接使用reinterpret_cast.

例如:

T1 *p1 = ...
T2 *p2 = reinterpret<T2*>(p1); // 糟糕! 


应该写成:

T1 *p1 = ....
void *p = p1; // 先用void*指向p1指向的内存区
T2 *p2 = static_cast<T2>(p);  


第93条(A):避免对指针使用static_cast

第94条(A):避免强制转换const(const_cast)

第95条(D):不要使用C风格的强制转换

第96条(D):不要对非POD进行 memcpy 和 memcmp 操作

第97条(C):不要使用联合(union)重新解释表示方式

     有两种方式是可以接受的:1)读取最后写入的字段(在一些接口需要统一参数而实际参数类型又不相同的时候,经常使用这一招);2)如果两个POD是一union的成员,而且均以相同的字段类型开始,那么对这种匹配的字段来说,写入其中一个而读取另一个是合法的。

第98条(A):不要使用可变长参数(...)

     就算要用,我也不会编写。呵呵

第99条(B):不要使用失效对象。不要使用不安全函数

    不要使用不安全的C语言遗留函数:strcpy, strncpy, sprintf等C函数。

第100条(B):不要多态地处理数组

    1)避免使用数组,而应该使用vector; 2)不要在数组或vector中存储多态的值对象,而应该存储对象指针(最好是智能指针)。

高级数据结构之R树(R-tree) R树(R-tree)是一种将B树扩展到多维情况下得到的数据结构,它最初由Antonin Guttman于1984年提出。B树的结点中会存储一个键的集合,这些键把线分成片段,沿着那条线的点仅属于一个片段。因此,B树使得我们可以很容易地找到点。如果把沿线各处的点表示成B树结点,我们就能够确定点所属唯一子结点,在那里可以找到该点。 Antonin Guttman在他提出R树的经典论文中给出的R树例子... 阅读详情

相关推荐

几率大的网络安全面试题(含答案)

其他篇章:Java校招极大几率出的面试题(含答案)----汇总 本文面试题汇总: 防范常见的 Web 攻击 重要协议分布层 arp协议的工作原理 rip协议是什么?rip的工作原理 什么是RARP?工作原理 OSPF协议?OSPF的工作原理 TCP与UDP区别总结 什么是三次握手四次挥手? tcp为什么要三次握手? dns是什么?dns的工作原理 一次完整的HTTP请求过程 Cookies和ses...

睶 6万+

C++核心准则ES.48:避免使用类型转换

ES.48: Avoid casts ES.48:避免使用类型转换 Reason(原因) Casts are a well-known source of errors. Make some optimizations unreliable. 类型转换是众所周知的错误来源之一。让某些优化处理无法可靠进行。 Example, bad(反面示例) double d = 2; auto p = (long*)&d; auto q = (long long*)&d; cou..

面向对象思考 1088

DDR内存接口深度解析:从寻址机制到FPGA时序约束实战

在高速数字系统设计中,内存接口是决定系统性能与稳定性的关键。DDR(双倍数据速率)技术通过在时钟的上升沿和下降沿传输数据,实现了带宽的倍增,广泛应用于消费电子、通信设备和工控主板等领域。其核心原理在于利用三维存储阵列(Bank、Row、Column)的分级寻址机制,通过先进行行激活、再进行列访问的固定时序,实现高速数据吞吐。理解这一寻址顺序是进行精准时序分析的基础。在工程实践中,FPGA作为内存控制器,需通过严谨的时序约束(如set_input_delay)来确保信号在高速传输下的建立与保持时间要求,从而将

weixin_29192211的博客 196

reinterpret_cast、const_cast、static_cast

C++知识点

m0_56131422的博客 310

利用LTspice设计Pt100测温电路

是一种广泛使用的温度传感器,它属于(RTD, Resistance Temperature Detector)的类型,通常用于温度测量。在0°C时,的电阻值为100欧姆,且它的电阻值会随着温度的升高而升高。PT100热电阻温度阻值对应表)因此可以根据这一特性来检测出环境温度。

2301_77033628的博客 2414

清华电子系保研面试全记录:五轮硬核考核+工程硕博专项解析(附真题)

本文详细解析了清华大学电子工程系保研面试的完整流程,重点剖析了其标志性的五轮专业面试(涵盖电路、电磁场、信号系统、计算机与AI)和综合组群面,并深入解读了工程硕博改革专项的考核要点与备战策略。文章提供了各专业组的真题示例与应对方法,旨在帮助电子信息相关专业学子系统准备,从容应对这场高强度的知识与综合素质挑战。

u0v1w2x3的博客 587

C++学习笔记(1)

C++学习笔记(1) 《21天学通C++(第8版)》Siddhartha Rao著 auto auto自动推断类型(C++11新增) //使用auto必须进行初始化 auto largeNumber = 25000000000000; //编译器根据初始值来确定合适的值,这里应该为long long auto迭代 int a[] = {1,2,3,4,5}; for(auto temp : a) { cout<<temp<<endl; } //auto&amp

七哥的博客 2080

RuoYi-Cloud-Plus使用minio进行文件上传图片后无法预览解决_修改minio配置minio桶权限---SpringCloud工作笔记198

在文件管理的位置,发现刚刚上传的图片文件,会显示 预览图片失败 后来经过多方查看,发现是minio的配置的问题。可以看到首先登录RuoYi-Cloud-Plus系统然后,打开文件管理页面可以看到,当上传了图片文件以后。登录以后,选中左侧Buckets,可以看到有自己用的桶,找到以后点击打开。显示文件展示中,文件预览失败,那么这个时候,去修改minio的配置。可以看到,点击配置管理,这里我们启用的是minio对吧。默认是没有配置的这个时候,是允许下载,但不允许预览的.

添柴程序猿的专栏 5567

C++编码规范

常量 一组相关的整型常量应定义为枚举 编译器会检查参数值是否是否位于枚举取值范围内 应当尽量避免枚举值重复,如必须重复也要用已定义的枚举来修饰 typedef enum { RTCP_SR = 200, RTCP_MIN_TYPE = RTCP_SR, //must be lowest known type RTCP_RR = 201, RTCP_SDES = 202, RTCP_B...

LIEY 768

曲线最小二乘拟合基础

介绍曲线拟合的最小二乘原理,介绍了常规最小二乘和正交最小二乘算法,最后介绍了MathNet矩阵运算库的基本操作。

yh523的博客 1303

【报错】ImportError: libpython3.10.so.1.0: cannot open shared object file: No such file or directory

ImportError: libpython3.10.so.1.0: cannot open shared object file: No such file or directory

静谧、淡雅 859

C++的类型转换:static_cast、dynamic_cast、reinterpret_cast和const_cast

在C++中,存在类型转换,通常意味着存在缺陷(并非绝对)。所以,对于类型转换,有如下几个原则:(1)尽量避免类型转换,包括隐式的类型转换(2)如果需要类型转换,尽量使用显式的类型转换,在编译期间转换(3)避免使用reinterpret_cast和老式的强制类型转换操作符通常,隐式的类型转换会导致警告,需要重视这些警告,并使用显式的类型转换代替,例如static_cast代替一些算术类型转换。在C+...

weixin_34095889的博客 290

锂电池充放电管理-单片机通用模版

- **①两节锂电池通过电阻分压检测ADC,再根据电压划分电量等级;** - **②充电使用的是锂电池充电IC方案,可通过硬件电阻参数调节充电电流,并可以通过STAT引脚检测充电和满电状态(充电注意会抬高电压);** - **③放电根据ADC_BAT检测电池电量进行等级划分(注意大负载电压骤降瞬间);** - **④充放电过程注意在电量划分等级临界值来回抖动现象;**

a6662580的博客 1488

C++编程规范 读书笔记(下)

《C++编程规范——101条规则、准则与最佳实践》(C++ Coding Standards——101 Rules, Guidelines and Best Practices) 名字空间与模块 第57条(D):将类型及其非成员函数接口置于同一名字空间中 第58条(D):应该将类型和函数分别置于不同的名字空间中,除非有意想让他们一起工作        ADL(参数依赖查找,也成Koeing

小飞侠 679

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

《GOOGLE C++ 编程规范》读书笔记

GOOGLE C++ 规范读书笔记 1、头文件 1、使用#define避免头文件被重复包含,定义的宏为全路径+文件名; 2、能使用前置声明的地方尽量不使用#include。即如果不需要访问类定义的情况下,使用类的前置声明即可;需要类定义时,则必须得包含头文件。 3、只有当函数只有10行甚至更少时才将其定义为内联函数;内联包含循环或switch语句的函数常常是得不尝失(除非在大多数情况下

pointersky的专栏 989

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

《C++编程规范》读书笔记(上)

《C++编程规范——101条规则、准则与最佳实践》(C++ Coding Standards——101 Rules, Guidelines and Best Practices) 组织和策略问题   设计风格   编程风格   函数与操作符

e5Max的专栏 1550

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

《C++编程规范》读书笔记

什么事匈牙利法?什么是泛型编程?为什么匈牙利法在泛型编程中根本不可行? 如何设置编译器的警告级别? 理解所有的警告,应该通过修改代码而不是降低警告级别来排查警告。 什么是RAII? 多线程的互斥锁应用RAII机制 STL 算法 84.用算法代替手工编写的循环 boost的lambda库 windows11使用最新版本boost的lambda库 boost中Function和Lambda的使用 观察者,桥接,工厂,访问者设计模式 transform for_each replace_if partition算

haimianjie2012的专栏 284

c++编程规范读书笔记

C++编程规范Steve McConnell:“始终站在代码阅读者和使用者的角度去编写和组织你的程序。”(一)文件结构头文件(.h/.hpp):程序声明定义文件(.cpp/.cxx):程序实现l1.1版权和版本的声明头文件开始处应列出:版权说明、程序功能、作者、版本号、生成日期、与其它文件的关系等。l1.2头...

weixin_33712881的博客 112

《C++编程规范》读书笔记(中)

《C++编程规范——101条规则、准则与最佳实践》(C++ Coding Standards——101 Rules, Guidelines and Best Practices) 类的设计与继承   构造、析构与复制

e5Max的专栏 1491

C++ 编程规范101读书笔记(0)引论

前一段时间,工作和生活的事情比较多,一直没有时间好好地来学习,博客一直没有什么有价值的东西更新。最近把以前的工作辞了,也有时间来看看以前买的书,C++这方面的书,我有几本:> ,>,提高C++性能的编程技术>>,  以前只是扫描地看了一两遍。这次,想仔细地再看一遍,并在博客上整理出来,做个记录。

老程序员专栏 601

C++编程规范之编程风格(读书笔记)

第14条 宁要编译时和连接时错误,也不要运行时错误。摘要能够在编译时做的事情,就不要推迟到运行时:编写代码时,应该在编译期间使用编译器检查不变式(invariant),而不应该在运行时再进行检查。运行时检查取决于控制流和数据的具体情况,这意味着很难知道检查是否彻底。相比而言,编译时检查与控制流和数据无关,一般情况下能够获得更高的可信度。讨论C++语言中提供了强大的静态检查功能,而对自动运行时检

经天纬地 856

C++编程规范之stl容器(读书笔记)

第76条 默认时使用vector。否则,选择其他合适的容器第77条 用vector和string代替数组摘要:有助于编写更安全,伸缩性更好的软件第78条 使用vector(和string::c_str)与非C++ API交换数据摘要:vector和string::c_str是与非c++ api通信的通道,但是不要将迭代器当作指针,要获取vector::iterator iter所引用的元素

经天纬地 827

C++编程规范之设计风格(读书笔记)

第5条 一个实体应该只有一个紧凑的职责摘要一次只解决一个问题:只给一个实体(变量、类、函数、名称空间、模块和库)赋予一个定义良好的职责。随着实体变大,其职责范围自然也会扩大,但是职责不应该发散。第6条 正确、简单和清晰第一摘要软件简单为美(Keep It Simple Software,KISS):正确优于速度。简单优于复杂。清晰优于机巧。安全优于不安全(见第83条和第99条)

经天纬地 844

C++编程规范(读书笔记,待续)

组织和策略问题 在高警告级别干净利落地进行编译 使用版本控制系统 设计风格 一个实体应该只有一个紧凑的职责 不要进行不成熟的优化 避免进行不成熟的劣化 尽量减少全局和共享数据 隐藏信息 编程风格 宁要编译时和连接时错误,也不要运行时错误 积极使用const 避免使用宏 避免使用“魔数” 尽可能局部地声明变量 总是初始化变量 避免函数过长,避免嵌套过深 函数与操作符 保持重载操作符的自然语义 优先使用

机器人们的后勤仓库 427

读书笔记:《C++ 编程规范——101条规则、准则与最佳实践》(3)编程风格

豆瓣链接:《C++ 编程规范——101条规则、准则与最佳实践》 一个人的常量可能是另一个人的变量。——Alan Prelis 第 14 条:宁要编译、链接时错误,也不要运行时错误 以下是一些静态检查的例子: 编译时布尔条件 如果有些布尔值可以在编译期获得并需要检查,可以用 static_assert 代替运行时检查的 assert 。 编译时多态 用 “模板”...

Zhaosiyii的博客 420

C++编程规范之stl算法(读书笔记)

第83条 使用带检查的STL实现摘要:安全第一,大多数带检查的stl都会通过在容器和迭代器中添加附加的调试和支持信息来自动的检查这些错误。第84条 用算法调用代替手工编写的循环第85条 使用正确的STL查找算法第86条 使用正确的STL排序算法 摘要:理解每个排序算法的作用,选择能够实现所需而开销最低的算法。第87条 使谓词成为纯函数第88条 算法和比较器的参数应多用函数对象少

经天纬地 1002
上一篇: 《C++编程规范》读书笔记(中)
下一篇: QtCreator的中如何使用第三方依赖库
e5Max
博客等级 码龄14年 145粉丝 129原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值