《Exceptional C++》笔记(1)

高压PCB设计:IPC-2221间距计算与Altium Designer规则驱动实战 在PCB设计中,电气间隙和爬电距离是确保高压电路安全运行的关键参数,其计算需依据IPC-2221标准,并考虑工作电压、海拔、污染等级等因素。通过Altium Designer的规则驱动引擎,可将这些参数转化为实时设计约束,实现自动化检查与验证。这种方法不仅提升了设计准确性,还广泛应用于电源、工业控制等高压场景。本文深入探讨如何利用IPC-2221和Altium Designer规则体系,解决高压PCB设计中的绝缘与布局挑战。 阅读详情

 

Exceptional_C++
1 编译防火墙和Pimp惯用法
  1. 对于函数的参数类型和返回值类型来说,只需要前置申明就足够了 被继承的基类必须有完整的定义,这样编译器才能确定子类对象的大小,虚函数以及其他基本信息. 定义类中的成员变量类型,必须有完整的定义(指针不需要),这样才能确定子类对象的大小
  2. 如果只要流的前置申明,应该优先使用#include<iosfwd>
  3. 如果只需要前置申明,绝对不要用#include包含相应的头文件
  4. 对于广泛应用的类,应该优先使用Pimpl惯用法来隐藏实现细节,通过一个不透明的指针(指向一个进行了前置声明但又没有定义的类)来保存私有成员(包括成员变量和成员函数).
    • 不能将虚成员函数放在Pimpl隐藏起来,这是为了能够在更深层次的派生类中进行覆盖
    • Pimpl中的函数可能需要一个指向可见对象的回指指针,并通过这个指针来调用可见类中的函数,这将会增加一个间接层
    • 通常,最好的折中方法就是将所有的私有成员(包括成员变量和函数)放入Pimpl中,并将只有私有成员才会调用的非私有函数也放入Pimpl中.
    • protected成员永远不应该被放入Pimpl中,因为这样会使保护成员失去其应有的作用.
    • 在某些情况下可以将Pimpl写成与原来的类完全一样的形式,而将原来的类写成仅由转调函数组成的共有接口.但这样原来的类在继承时基本无用了.
  5. 只有当性能分析和经验教训都证明了,确实需要有额外的性能提升时,才使用Pimpl惯用法,并且在通常情况下使用pimpl,而在特殊情况下使用Fast Pimpl(使用定容量的Allocator)
2 名字查找,名字控件和接口规则
  1. 如果在声明函数的参数时,使用了一个类(例如NS::T),那么在查找正确的函数名字时,编译器在包含参数类型的名字空间中也会进行参数名字的匹配.
    
    
          
    1. namespace NS 
    2. { 
    3.     class T{}; 
    4.     void f(T); 
    5. } 
    6. NS::T parm; 
    7. int main() 
    8. { 
    9.     f(parm); 
    10. } 
  2. 所有的函数(包括自由函数,非类的成员函数)也可以在逻辑上看成是类X的一部分(它们可以看作是类X接口的一部分),如果它满足:
    • 使用了类X
    • 与X同时被定义(在同一个头文件/同一个命名空间中)
  3. 如果在客户代码中定义了一个使用类X的函数,并且这个函数与X所在的命名空间(不是类空间!),并且这个函数与X所在的命名空间中的一个函数原型相匹配,那么这个函数的调用将出现二义性
    
    
          
    1. namespace A 
    2. { 
    3.     class X{}; 
    4.     void f(X); 
    5. } 
    6. namespace B 
    7. { 
    8.     void f(A::X); 
    9.     void g(A::X param) 
    10.     { 
    11.         f(param)  //二义性:是A::f还是B::f? 
    12.     } 
    13. } 
  4. 根据接口规则,成员函数与类的关系要强于非成员函数与类的关系,例如
    
    
          
    1. namespace A 
    2. { 
    3.     class X{}; 
    4.     void f(X); 
    5. } 
    6. class B 
    7. { 
    8.     void f(A::X); 
    9.     void g(A::X param) 
    10.     { 
    11.         f(param)  //不存在二义性,使用B::f,因为成员函数与类的关系更强于非成员函数与类的关系 
    12.     } 
    13. } 
  5. 从接口规则中可以推断出如果A和B是两个类,并且f(A,B)是一个自由函数,那么
    • 如果A和f同时被定义,那么f就是A的一部分,因此A将依赖于B
    • 如果B和f同时被定义,那么f就是B的一部分,因此B将依赖于A
    • 如果A,B和f同时被定义,那么f即是A的一部分,也是B的一部分,因此A和B相互依赖
  6. 派生类中的名字隐藏问题在所有的嵌套作用域中也同样存在,其中包括命名空间.
  7. 当在基类/派生类的名字隐藏中遇到这样的问题时,可以有两种解决方案:
    • 让调用代码明确第指出它想调用的函数
    • 通过using申明语句使它向调用的函数在正确的作用域中是可见的.
  8. 正确地使用命名空间.如果将一个类放入命名空间,那么同时要保证将这个类的所有辅助函数和运算符函数也放入相同的命名空间.否则,你将在代码中发现奇怪的结果.
Date: 2013-04-14 22:51:54 中国标准时间
Author:
Org version 7.8.11 with Emacs version 24
Validate XHTML 1.0

本文出自 “暗日” 博客,请务必保留此出处http://darksun.blog.51cto.com/3874064/1178200

More Exceptional C++ 读书笔记 More Exceptional C++ 读书笔记 Item 1 Switching Streams (1): 多考虑易读性,避免编写过渡简洁但是不易懂,不易维护的代码;    记个相当简洁的流切换代码:  (argc > 2 ? ofstream(argv[2], ios::out|ios::binary) : cout ) 1 ? ifstream(argv[1],      ios 阅读详情

相关推荐

Exceptional C++ 目录

第1章 泛型程序设计与 C++ 标准库 条款1:迭代器 条款2:大小写不敏感的字符串——之一 条款3:大小写不敏感的字符串——之二 条款4:可重用性最大的泛型容器——之一 条款5:可重用性最大的泛型容器——之二 条款6:临时对象 条款7:标准库的使用(再论临时对象) 第2章 异常安全性的问题与技术 条款8:编写异常安全的代码——之一 条款9:编写异常安全的代码——之二 条

早晨的阳光 的技术博客 896

Exceptional C++ 笔记

1、 使用常引用const & 代替值传递 2、 使用先增操作,避免使用后增操作:在进行后增操作时,对象不但需要自增,还要返回一个包含自增前值得临时对象。 3、 遵循‘单入口/单出口’原则,绝不要在一个函数里面写有多个return语句。 4、 绝对不要返回对局部对象的引用!!! 5、 尽量使用标准库算法 6、 优先采用 "a opt= b" 这样的写法, 而不是 "a...

qq_32619837的博客 358

手把手教你用VM实现欧姆龙PLC数据采集(含Fins协议配置详解)

本文详细介绍了如何使用VM(VisionMaster)实现与欧姆龙PLC的数据采集,重点解析了Fins协议(包括Fins TCP/UDP)的配置步骤。从网络环境搭建、PLC的IP地址设置,到VM端Fins通讯通道的详细配置与数据点映射,提供了完整的实战指南。文章还涵盖了数据收发解析、常见问题排查清单,帮助工程师快速完成视觉系统与PLC的稳定集成。

weixin_29171087的博客 189

Exceptional C++读书笔记:编译器防火墙与Pimpl惯用法(一)

Exceptional C++第四章主要介绍如何降低编译期文件依赖性以及常用的Pimpl用法。 方法一:不要用#include指令包含一些不必要的头文件,因为这样会严重降低编译效率,增加编译时间。 如下程序片段: 1.可以去掉iostream 因为根据代码,只需要ostream即可,况且已经包含进来ostream的头文件2.用#include代替#include 两处用到ostreamde

随便写写........... 569

当迁移学习遇见室内定位:基于UJIIndoorLoc的跨场景适配实践

本文探讨了迁移学习在跨建筑室内定位中的应用,重点解析了UJIIndoorLoc数据集的特性及其在解决设备差异和环境变化中的关键作用。通过特征工程、迁移学习策略和小样本微调技术,显著提升了定位模型的跨场景适配能力,为实际部署提供了有效解决方案。

weixin_29038155的博客 394

高速光耦在隔离串口通信中的选型与优化策略

本文深入探讨了高速光耦在隔离串口通信中的关键作用与选型优化策略。针对串口通信中因普通光耦响应慢导致的误码问题,文章详细分析了响应时间、电流传输比、供电电压与隔离耐压等核心选型指标,并对比了6N137、HCPL-0601等主流型号。同时,提供了电路设计、PCB布局的优化技巧及实用的调试指南,旨在帮助工程师实现高速、稳定的隔离串口通信。

grpc6streamer的博客 322

Exceptional C++ Syle 学习笔记

看完了《Exceptional C++ Syle》,现将书中一些重要的东西记下来,以供以后翻阅。   第1条        vector的使用  使用vetor∷at,该成员函数会进行下标越界检查以确保当前vector中的确包含了需要的元素。 名言:一般说来,不应该为不使用的东西付出代价。 使用operator[],标准并不强制operator[]进行越界检查,高效性。   size

Desilting's 足迹 2463

LIO-SAM运行报错‘process has died’?别慌,一个命令搞定libmetis.so库路径问题

本文详细解析了LIO-SAM运行中常见的‘process has died’报错问题,特别是由libmetis.so库路径错误导致的节点崩溃。通过一个简单的命令移动库文件到正确位置,即可快速解决这一问题,同时提供了多种替代方案和预防措施,帮助开发者更好地理解Linux动态库加载机制和ROS环境管理。

weixin_29231221的博客 205

Exceptional C++ 学习笔记1

第一条 vector的使用        1 v[i] 与 v.at[i]        这个知识点主要是讲用[]和at访问vector元素的区别。如果[]的话,因为标准并没有要求它做范围检查,所以效率较高,但访问越界不会抛出异常,可能会产生未定义行为。如果是用at的话,该成员函数会进行下标越界检查,所以越界时会抛出异常out_of_range。         2 调整vector大小 ...

u012101561的博客 548

15、Qt开发中的停靠窗口、工具栏与多文档界面实现

本文详细介绍了Qt开发中停靠窗口、工具栏与多文档界面(MDI)的实现方法。通过QDockWidget和QToolBar构建灵活的用户界面,并利用QMainWindow的saveState和restoreState功能实现布局持久化;使用QMdiArea和QMdiSubWindow实现多文档管理,结合MainWindow与Editor类完成文件操作与窗口控制。文章包含完整代码示例、流程图与表格总结,适用于开发集成环境、文本编辑器等复杂桌面应用。

snow3的博客 163

2018安徽省青少年信息学奥林匹克(AHOI)初中组

12 种合法的排列分别为:1, 3, 2, 4, 2, 3, 1, 4, 3, 1, 4, 2, 3, 2, 4, 1, 1, 3, 4, 2, 2, 3,4,1,1,4,2,3, 2,4,1,3, 4,1,3,2, 4,2,3,1, 1,4,3,2, 2,4,3,1。分为 2 组,一组的队员实力值是{4, 5, 2, 3},一组是{-4, -3, -5},其中最小的组人数为 3,可以发现没有比 3 更优的分法了。[0, 1, 1, 2]同样不是合法的分组方案,因为出现了两个实力值为 1 的选手。

weixin_42358969的博客 1143

Exceptional C++ 读书笔记

  Exceptional C++ 读书笔记 1 泛型程序设计与C++标准库(没看) Item 1 Iterator: 1)注意当前迭代器是否有效,如果无效则解引用产生程序错误;2)注意当前迭代器生命期,某些容器经过某些操作后将重新分配内部存储空间,则当前迭代器无效;3)有效范围, 类似find(first, last, value)时, 迭代器first 必须在last之前,必须保证

Hisense的专栏 1984

FAST-LIVO2 源码精读(五):IMU 运动模型、离散传播与去畸变原理

本文是「FAST-LIVO2 激光-惯性-视觉里程计源码精读」专栏第五篇,数学基础篇章(第 4–7 篇)的第二篇。上一篇在 SO(3) 流形上建立了姿态表示与右扰动模型;本篇聚焦 IMU 预积分的核心问题:一帧激光扫描横跨约 100 ms,帧内每一个点的采集时刻各不相同,如何利用 200 Hz 的 IMU 量测将全帧点云统一对齐到帧末时刻?答案完整封装在(587 行)的函数中,本篇逐段拆解其四阶段逻辑,并推导协方差矩阵随误差状态转移矩阵F_x逐帧演化的物理含义。

PX4-SLAM-PNC 158

Exceptional C++ 翻译 感言

 当我从冀康手中拿到这本书的时候,心里既是激动,又是忐忑。毫无疑问,《Exceptional C++》是C++中的权威力作,能够翻译大师们的著作,不仅是我的荣誉,也是我向往已久的事情。不过,激动之余,又不免有所忐忑。从1999年《Exceptional C++》英文版问世以来,在国内已经推出了一些中文版本,包括:候捷先生于2000年推出的繁体中文版和卓小涛先生于2003年推出的简体中文版。由于

niexuejun的专栏 827

【华为OD技术面试手撕真题】3、小行星碰撞 | 手撕真题+思路参考+代码解析(C & C++ & Java & Python & JS)

小行星碰撞,本专栏更新每年华为OD机试的高频手撕代码题,每个题目都会使用五种语言进行解答(C & C++& Java & Python & JS),思路分析都非常详细, 实现最低的时间复杂度和高通过率,每个解题思路超过百字,内含各个编程语言的八股文面试题,欢迎大家订阅学习, 代码可以直接运行使用,全网限时最低价,持续更新

KJ.JK 8171

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

more exceptional c++读书笔记

Part1 我是在读完Scott Meyers的《Effective c++》之后才读到这本书的。能够讨论特定的主题而不是将一门语言作为一个整体来看待是我理解c++的首选方式,所以Sutter和Meyers的书非常适合我。 与Meyers系列相比,exception c++系列的主要优势在于,您可以告诉Sutter是更好的程序员。你可以相信Meyers 所说的一切都是正确的,但最终你真正得到的只是一些关于如何做某些事情的额外指示。另一方面,Sutter在同样的主题上讲得更深入一些,让你觉得自己可以写出更

itaoest的博客 413

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C++ Exceptional 重载运算符new和delete时要注意的地方

首先看下面一段代码,找出代码中存在的问题:class B { public: virtual ~B(); void operator delete(void*, size_t) throw(); void operator delete[](void*, size_t) throw(); void f(void*, size_t) throw(); };class D

chpeui的专栏 533

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Exceptional C++

(翻译的太差了)一、语法细节C++不允许修改内置类型的临时变量缺省参数根据静态类型获得重载的new和delete操作符永远都是静态的,不管你声明static没有二、惯用法选择前置递增,只有打算使用初始值时才使用后置递增,并且使用前置递增来实现后置递增注意由隐式转换创建的隐藏临时对象;避免这个问题的好办法,是使用explicit构造函数,避免编写转换操作符永远不要#include不必要的头文件;当前

切尔斯基 5305

More Exceptional C++ 笔记

Exceptional C++ 读书笔记  1 泛型程序设计与C++标准库(没看)  Item 1 Iterator: 1)注意当前迭代器是否有效,如果无效则解引用产生程序错误; 2)注意当前迭代器生命期,某些容器经过某些操作后将重新分配内部存储空间,则当前迭代器无效; 3)有效范围, 类似find(first, last, value)时, 迭代器first 必须在last之

小飞侠 1080

More Exceptional C++ 中文版试读(译序及目录)

 [Herb Sutter 的名作More Exceptional C++中文版即将出版。作为本书译者,我很高兴将本书推荐给大家。征得华中科技大学出版社同意,我将公开部分译稿,敬请大家批评指正。]  与大师面对面(译序)  小提琴家穆特录制过一张唱片,收录的是贝多芬最伟大的两部小提琴作品1。聆听那张唱片,你仿佛听见贝多芬在向你倾诉他对音乐艺术的理解和感悟、为你解答小提琴音乐创作

lostmouse的专栏 1803

CSAPP 第八章 Exceptional Control Flow 读书笔记 part 1

Operating system subroutine” 是指操作系统中的子程序(subroutine),用于执行特定的操作系统功能。这些子程序通常由操作系统提供,为应用程序和其他系统组件提供服务。文件系统子程序:通过提供文件名和权限,打开文件以便读取或写入。关闭先前打开的文件,释放相关资源。进程控制子程序:在操作系统中创建新的进程。终止正在运行的进程。内存管理子程序:为程序或进程分配内存空间。释放先前分配的内存空间。设备管理子程序:打开并准备使用设备。关闭设备,释放相关资源。

weixin_43876597的博客 1146

Herb Sutter 又要出新书--《Exceptional C++ Style》啦!

《Exceptional C++ Style》40 New Engineering Puzzles , Programming Problems, and Solutions3月1日收到Herb Sutter的mailing-list, 浏览之下发现Herb Sutter又有新书要出版了--《Exceptional C++ Style》,现在已到了最后结集和制作索引的阶段,

adamsun(令狐冲)的专栏 1822
上一篇: Remember Mode 指导
下一篇: 《Exceptional C++》笔记(2)
darksun9972
博客等级 码龄19年 42粉丝 399原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值