<<Effective C++>>笔记4

<<Effective C++>>读书笔记4: 设计与声明 每一个Item都很经典,都需要去思考揣摩,我在这里将要点抽象出来,便于日后快速回忆;我只是在做文章的“搬运工”。         Item 18 使接口易于正确使用 1. function接口,class接口,template接口......每一种接口都是客户(调用者)与你的代码互动的手段。 2. 防止可能的客户(调用)错误的另一个方法是:限制类型内什么事可以做什么事不能做;施加 阅读详情

Chapter 4 Designs and Declarations

Item 18:1)Good interfaces are easy to usecorrectly and hard to use incorrectly. You should strive for thesecharacteristics in all your interfaces.

       2)Ways to facilitate correct use include consistency in interfaces and behavioral compatibility with build-in types.

       3)Ways to prevent errors include creating new types, restricting operations on types,constraining objects values, and eliminating client resource managementresponsibilities.

       4)tr1::shared_ptr supports custom deleters. This prevents the cross-DLL problem, can be used to automatically unlock mutexes, etc.

Item 19: Class design is type design.Before defining a new type, be sure to consider all the issues discussed inthis Item. 构建类之前要考虑很多方面

Item 20:1)Prefer pass-by-reference-to-constover pass-by-value. It’s typically more efficient and it avoids the slicing problem.

       对于正常的C++程序,传值的地方传const引用总是没错的(是传递不是返回),因为const引用完全能够满足传值的需求。

       string就是个类,而不是内置类型,对于类对象而言当传值的时候所引起的构造、析构(包括基类)的消耗是惊人的。

       传引用时当不修改对象的时候const不可少。传值得时候只是对复制版本的修改而不是对原对象的修改。

       slicing problem 切片问题。就是当派生类对象传递给形参为基类对象的时候,基类对象的构造函数被调用,此时构造的是基类对象。派生类对象中的特性被“切除”了。传值是会导致切片问题的,当传引用的时候就能避免切片问题。

       2)The rule doesn’t apply to built-in types and STL iterator and function object types. For them, pass-by-value is usually appropriate.

       本质上引用是以指针的形式实现的(python的引用也是这个样子)

       buit-intypes 本来就是设计为传值效率好的。因为很小巧。iterator和function object其本质上也是指针。

Item 21:Never return a pointer or reference to a local stack object, a reference to a heap-allocated object, or a pointer or reference to a local static object if there is a chance that more than one such object will be needed.

       对于引用,引用只是个别名而已,只有已经存在的对象才能存在引用,当出现引用的时候我们必须问自己,它的另外一个名字叫什么。

Item 22:1)Declare data members private. It gives clients syntactically uniform access to data, affords fine-grained access control, allows invariants to been forced, and offers class authors implementation flexibility.

       类对象的封装性非常的重要,封装深度与操作不变性,数据访问控制,代码易维护性直接相关。当设计降低类对象的封装性的时候,就要考虑这么做的理由。

       2)protected is no more encapsulated than public.

Item 23: Prefer non-member non-friend functions to member functions. Doing so increases encapsulation, packaging flexibility, and functional extensibility.

       这一条也是为了保护封装性。non-friend functions 很容易理解,有友元的时候就有别的类或者函数能够访问类的私有数据,封装性降低。这里的member function是指可以从其他member function实现的接口。通常的方便函数,就是一个成员函数的组合,完成组合中所有成员函数的功能。

       我们应当精简模块对外的接口,任何可以从其他接口实现出来的接口都是多余的,至少他们不应该出现在同一层次上。对程序每个部分需要了解的知识越少,越有利于正确搞笑的实现。反过来也成立:任何数据都应该被最少的代码所见,这样才能适应数据结构的变化。

       对于方便函数可以用命名空间的形式来实现,不同类型的方便函数都可以有单独的头文件中,但是这些都属于同一个命名空间。要用那种类型的就包括该类型方便函数的头文件就行了。

       这就是STL的组织方式,STL有很多的头文件(<vector><algorithm><memory>,etc),各自定义了一些在std名称空间中的功能。当只使用与vector相关的功能的时候就包含头文件<vector>即可。也因为名称空间可以在不同的文件中实现这个缘故,所以才有这种组织形式。

Item 24: If you need type conversions on all parameters to a function (including the one pointed to by the this pointer), the function must be a non-member.

       与成员函数对立的是非成员函数,而不是友元函数,任何时候能避免使用友元函数的时候都要避免使用友元函数。

Item 25:该条款尚未理解

<<Effective C++>>读书笔记1: 让自己习惯C++ 每一个Item都很经典,都需要去思考揣摩,我在这里将要点抽象出来,便于日后快速回忆;我只是在做文章的“搬运工”。         Item 1: 将 C++ 视为语言联合体 1. 这一小节,我在网上找的2个图就能说明一切。            Item 2 用 const, enum 和 inline 取代 #define 1. 对于#define SOMETH 阅读详情

相关推荐

<<Effective C++>>读书笔记3: 资源管理

每一个Item都很经典,都需要去思考揣摩,我在这里将要点抽象出来,便于日后快速回忆;我只是在做文章的“搬运工”。         Item 13 使用对象管理资源 1. 当一个 auto_ptr 被销毁时,会自动删除它所指向的东西,所以不要让超过一个的 auto_ptr 指向同一个对象。如果发生了这种事情,那个对象就会被删除超过一次,而且会让你的程序进入未定义行为。为了防止这个问题,aut

Lemon 887

<<Effective C++>>读书笔记(4)

七.模板与泛型编程 这个以后再补 41.了解隐式接口和编译期多态 42.了解typename的双重意义 43.学习处理模板化基类内的名称: 44.将参数无关的代码抽离templates: 45.运用成员函数模板接受所有兼容类型: 46.需要类型转化时请为模板定义非成员函数: 47.请使用traits classes表现类型信息: 48.认识tempate元编程:八.定制new和de

oyhy_的博客 352

<<Effective C++>> 读书笔记6: 继承与面向对象设计

每一个Iterm都很经典,都需要去思考揣摩,我在这里将要点抽象出来,便于日后快速回忆;我只是在做文章的“搬运工”。         Iterm 32 确保public继承模拟出is-a关系 1. 使用C++进行面向对象编程时唯一最重要的准则就是:public继承意味着”is-a”, 适用于基类的每一件事也适用于派生类;要让这个规则刻骨铭心。 2. 通过“编译器”(在编译时)阻止企鹅飞翔企

Lemon 899

<<Effective C++>>读书笔记

谨以此书作为现代C++程序设计的基石没有阅读和模板有关的章节,将已经是常识的概念没有记录 使用const enum inline替换#define,便于调试。因为使用#define定义的变量不进入符号表。 尽可能在所有的地方使用const重载二元运算符时,防止出现无聊的赋值行为。 const Blas& operator+(const Blas& lhs,const Blas& rhs);if(a*

uufree的博客 339

3D Slicer:从入门到精通(二)——入门指南

本篇文章包含开始使用3D Slicer所需的信息,包括如何安装和快速开始使用基本功能,以及在哪里找到更多信息。

walt3433的博客 2万+

Ubuntu 24.04 高效部署Slurm集群:从零到生产环境实战

本文提供了一份在Ubuntu 24.04 LTS系统上从零开始部署生产级Slurm高性能计算集群的完整实战指南。内容涵盖网络配置、Munge安全认证、Slurm核心组件安装与配置,并深入讲解了cgroups资源隔离、NFS共享存储、配置无感知模式等生产环境优化技巧,最后通过实例演示如何提交与管理Slurm作业,帮助用户构建高效、稳定的计算平台。

weixin_29213655的博客 564

<<Effective C++>>读书笔记(三)

条款27 尽量少做转型动作C++ 中提供的四种新式转型1.const_cast<T> (expression) 2.dynamic_cast<T> (expression) 3.reinterpret_cast<T> (expression) 4.static_cast<T> (expression) const_cast通常被用来将对象的常量性转除. dynamic_cast 主要用来执行安全向下

zyfforlinux 985

量子密钥分发系统设计与实现(一):系统基本架构讨论

本文主要对量子密钥分发系统中的基础架构和基于系统的量子密钥协商过程进行了初步讨论,为后期系列文章进行铺垫。

量子领域相关话题 3891

<<Effective C++>>读书笔记(一)

条款03 尽可能使用const 分清顶层const和底层const的区别 顶层const指的是const在*号的右边,表示指针本身是一个常量,无法修改对象本身. 底层const指的是const在*号的左边,表示的则是指针所指的对象是一个常量, 无法修改其指向的对象 对于内置数据类型来说const无所谓底层(基本类型没有指向某个对象的意思)的概念,引用本身不是对象 所以也无所谓顶层const,只有指针

zyfforlinux 729

【Unity】制作简易三维场景

本文介绍如何制作一个三维场景

CiNian_的博客 5332

【5G全网建设】Option3X和Option2模式建安市、兴城市和四水市核心网、承载网网络设计与部署

拓扑规划: Option 3X网络拓扑图规划 Option 2网络拓扑图规划 设备部署: 建安市核心网 建安市承载中心机房 建安市骨干汇聚机房 建安市3区汇聚机房 建安市C站点无线机房 兴城市核心网 兴城市承载中心机房 兴城市骨干汇聚机房 兴城市2区汇聚机房 兴城市B站点无线机房 数据配置: 建安市核心网 建安市承载中心机房 建安市骨干汇聚机房 建安市3区汇聚机房 建安市C站点无线机房 兴城市核心网 兴城市承载中心机房 兴城市骨干汇聚机房 兴城市2区汇聚机房 兴城市B站点无线机房 业务调试

weixin_67183034的博客 8851

<<Effective C++>>读书笔记(二)

条款13 以对象管理资源把资源放进对象内,便可以依赖C++的析构函数自动调用机制,确保资源被释放.两个步骤: * 获得资源后立刻放进管理对象 * 管理对象运用析构函数确保资源被释放这种以对象管理资源的观念被资源获得世纪便是初始化时机也就是所谓的RAII机制.可以为资源专门创建一个类来管理,也可以把资源交由一些智能指针来管理.下面是一个使用RAII机制管理的互斥锁资源:#ifndef LIB_MU

zyfforlinux 755

EPLAN中2D安装板的绘制方法示例

EPLAN中2D安装板的绘制方法示例

Robot_PLC_HMI_Automation 3212

<<Effective C++>>读书笔记5: 实现

每一个Item都很经典,都需要去思考揣摩,我在这里将要点抽象出来,便于日后快速回忆;我只是在做文章的“搬运工”。         Item 26 只要有可能就推迟变量定义 1. 不仅应该推迟一个变量的定义直到你不得不用它之前的最后一刻,而且应该试图推迟它的定义直到你得到了它的初始化参数。通过这样的做法,你可以避免构造和析构无用对象,而且还可以避免不必要的缺省构造。更进一步,通过在它们的含义

Lemon 726

军品研制过程-转阶段

介绍军品转阶段评审

Abel的博客 2万+

ESP-IDF OTA升级过程中遇到的“esp_transport_read returned:-1 and errno:128”问题(4)

ESP-IDF OTA升级过程中遇到的“esp_transport_read returned:-1 and errno:128”问题(4)

phmatthaus的专栏 1532

<<Effective C++>>读书笔记(1)

一.让自己习惯C++2.尽量以const,enum,inline替换#define: a)当我们定义一个常量时,最好使用const常量,而非#define,因为define会无脑的替换,const常量可以是专属于某处的,而#define所定义的是全局的. b)使用enum类似于#define,但是效果更好,而且enum也可以作为int类型的变量使用. c)有时候我们会用#define来定义一个

oyhy_的博客 509

NTscan扫描工具

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

<<Effective C++>>读书笔记8: 定制new和delete

每一个Item都很经典,都需要去思考揣摩,我在这里将要点抽象出来,便于日后快速回忆;我只是在做文章的“搬运工”。         Item 49 了解 new-handler 的行为 1. 声明的结尾处的 "throw()" 是一个异常规范,它是说这个函数不会抛出任何异常。 2. 当 Widget 从 NewHandlerSupport 继承时,它其实是在说:我是 Widget,而我要从

Lemon 817

Devexpress16.2.6破解工具

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

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

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

<<Effective C++>>笔记5

Chapter 5: Implementation Item 26:Postpone variable definition aslong as possible.        Postponevariable definition as long as possible. It increases program clarity andimproves program efficiency

sicofield的专栏 642

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

<<Effective C++>>笔记1

Chapter 1 Item 1: Rules for effective C++ programming vary, depend on the part of C++ you are using. C++共分为四个部分:C、Object-Oriented C++、Template C++、STL   Item 2: 1、For simple constants, prefer cons

sicofield的专栏 603

<<Effective C++>>读书笔记7: 模板与泛型编程

每一个Item都很经典,都需要去思考揣摩,我在这里将要点抽象出来,便于日后快速回忆;我只是在做文章的“搬运工”。         Item 41: 理解隐式接口和编译期多态 1. 显式接口: 它在源代码中显式可见; 显式和隐式接口之间的区别是与 template有关的新内容。    [隐式接口:模板中的接口,模板类型的不确定导致对象的方法、数据是不确定的;如果没有调用关系,即使没有相应的

Lemon 931

<<Effective C++>>读书笔记9: 杂项讨论

每一个Item都很经典,都需要去思考揣摩,我在这里将要点抽象出来,便于日后快速回忆;我只是在做文章的“搬运工”。         Item 53 不要轻易忽略编译器警告 1. 编译器警告,往往和它们“看起来”的意义十分不同!在你打发某个警告信息之前,请确定你了解它意图输出的精确意义。   [本小节中的示例:这个编译器警告试图告诉你申明于B中的f并未在D中被重复申明,而是被整个遮掩了;这里

Lemon 969

<<Effective C++>>笔记3

Chapter 3 ResourceManagement Item 13: 1、To prevent resource leaks, use RAII objects(智能指针) that acquire resource in their constructors and release them in their destructors. 当将delete语句写入某个函数的时候,因为可能在

sicofield的专栏 509

<<Effective C++>>读书笔记2: 构造/析构/赋值函数

每一个Item都很经典,都需要去思考揣摩,我在这里将要点抽象出来,便于日后快速回忆;我只是在做文章的“搬运工”。     Item 5 了解 C++ 为你偷偷地加上和调用了什么函数 1. 一个空类,如果不声明一个拷贝构造函数,一个拷贝赋值运算符和一个析构函数,编译器就会为这些东西声明一个它自己的版本。此外,如果没有声明构造函数,编译器就会为你声明一个缺省构造函数。所有这些函数都被声明为 p

Lemon 855

<<Effective C++>>备忘

1、pointer to pointer------vs------reference to pointer

506

读<<effective C++>>的疑惑总结

代码编译环境: 操作系统:Red  Hat  5.6  i386  编译器:  GCC  4.1.2 条款05:了解c++默默编写并调用哪些函数 如果某个base classes将copy assignment操作符声明为private,编译器将拒绝为其派生类生成一个copy assignment?? #include namespace contestjia{ class

一息尚存 从吾所好 291
上一篇: <<Effective C++>>笔记3
下一篇: <<Effective C++>>笔记5
sicofield
博客等级 码龄18年 169粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值