[读书笔记]深度探索C++模型_第二章_构造函数语意学

从零到一:基于Rocky Linux 9的Kubernetes高可用集群部署实战 本文提供了一份基于Rocky Linux 9操作系统,从零开始部署Kubernetes高可用集群的完整实战指南。详细讲解了包括系统初始化、容器运行时配置、使用kubeadm工具进行集群初始化、节点加入以及Calico网络插件安装在内的核心步骤,并针对国内网络环境提供了镜像加速等优化方案,旨在帮助读者构建一个稳定可靠的生产级K8s环境。 阅读详情

在这一章中,作者要挖掘编译器对于“对象构造过程”的干涉(就是说编译器会对代码做适当的补充),以及对于“程序形式”和“程序效率”上的冲击。

所以这一章,主要是编译器会在什么时候对构造函数干什么的概念上的讲解。

被合成的default constructor只满足编译器的需要,而不是程序的需要。

如果有多个class member object都要求constructor初始化操作,将如何?C++语言要求以“member object在class中声明顺序”来调用各个constructor。

有四种情况,编译器必须为未声明constructor的classes合成一个default constructor
- 调用member object的default constructor
- 调用base class的default constructor
- 为每一个Object其virtual function机制
- 或virtual base class机制

至于没有那4种情况又没有声明任何constructor的classes,我们说它们拥有的是implicit trivial default constructors(隐式无用的默认的构造器),它们实际上并不会被合成出来。

在合成的default constructor中,只有base class subobjects和member class objects会被初始化。其它所有都不会初始化。

从某个object拷贝一份到另一个object身上。不过它并不会拷贝其中的member class object,而是以递归的方式施行memberwise initialization(每个成员的初始化)。

什么时候一个class不展示出”bitwise copy semantics”(逐位拷贝)呢?
- 1、当class内含一个member object而后者的class声明有一个copy constructor时(不论是被class设计者显式地声明,就像前面的String那样;或是被编译器合成,像class Word那样)。
- 2、当class继承自一个base class而后者存在一个copy constructor时(再次强调,无论被显式声明或是被合成而得)。
- 3、当class声明了一个或多个virtual functions时。
- 4、当class派生自一个继承串链,其中有一个或多个virtual base classed时。

上面四种情况其实用一句后概括就是有指针,就不能逐位拷贝。

使用成员初始化列表来初始化成员函数,
Word::Word():_cnt(0),_name(0)
{}
要注意:list中的项目顺序是由class中的members声明顺序决定的,不是由Initialization list中的排列顺序决定的。

Embarcadero Dev-C++ 6.3安装教程【保姆级】 Embarcadero Dev-C++ 6.3安装教程,保姆级教程~ 阅读详情

相关推荐

浙政钉(专有钉钉)门户免登(超详细)

钉钉家族 介绍浙政钉门户免登之前,首先搞清楚几个软件的关系,软件分别是:钉钉,专有钉钉,浙政钉 钉钉 是阿里巴巴集团专为中小企业打造的沟通和协同的多端平台。 专有钉钉 原名 政务钉钉,有更开放的设计能力、集成能力、更结构化协同产品、更定制化开发平台。支持专有化部署,数据落本地,更安全、客户可对该产品持牌运营、结构化编排,协助构建本地应用中心、提供移动应用全面安全保障体系。 浙政钉 为规范浙政钉整体架构体系,按照统分结合原则,由省政府办公厅统一设计整体工作界面和系统框架,统筹指导全省统建应用建设,各单

一缕南风的博客 2万+

[读书笔记]深度探索C++模型_第五章_构造、析构、拷贝语意学

5.1“无继承”情况下的对象构造 考虑下面这个程序片段: (1) Point global; (2) (3) Point foobar() (4) { (5) Point local; (6) Point *heap = new Point; (7) *heap = local; (8) // ... stuff ... (9) delete heap; (10) return...

xy_cpp的博客 270

A B C三个气象站的小波分析结果解读

在小波分析的过程中,信号的不同频率分量会在不同的尺度上显现,而纵轴上的数值表示信号在相应尺度上的强度或能量。2. **小波方差的横轴(水平轴)**:横轴上的尺度表示用于分析的小波函数的尺度。1. **共同趋势:** 在所有三个点的小波方差图中,随着尺度的增加,方差逐渐增大,尤其是在较大的时间尺度上。3. **尺度30的特殊性:** 在所有点的小波方差图中,尺度30似乎是一个特殊的点,对应着一个较长的时间尺度上的波动或变化。2. **方差的大小:** 方差的大小反映了在相应尺度下信号的波动强度。

weixin_44259522的博客 859

《深度探索C++对象模型》读书笔记第二章:构造函数语意学

第二章主要分析编译器什么情况下为我们合成默认构造函数,我的这篇博客已经写得很详细了: C++编译器默认构造函数合成机制分析,这次只写一些其他要点。 编译器在四种情况下会为未声明构造函数的类合成默认(nontrival)构造函数。被合成出来的构造函数只能满足编译(而非程序)的需要,分别是:(1)包含的成员对象有默认构造函数。(2)继承的基类有默认构造函数。(3)该类含有虚函数,需要

FreeeLinux's blog 822

MATLAB实战:手把手教你实现Gardner环路位同步(附完整代码)

本文通过MATLAB实战,详细讲解了Gardner环路位同步算法的原理与实现。内容涵盖插值滤波器、定时误差检测、环路滤波器与数控振荡器等核心模块,并提供完整代码和调试技巧,帮助读者掌握数字通信中关键的符号定时同步技术。

weixin_29048775的博客 174

基于单片机控制的开关电源设计

采用开关电源技术和MCU模块,凭借可靠性高、易于调适的特点,可以更高效地发挥出二者的优势,从而实现更好的组合。stm32的起动模式是通过Boot0和Boot1两个管脚的高低电平来决定的,当stm32被供电之后,这两个管脚的电平。在 VCC上,键盘的一头(列线)被连接到 VCC上,而在“0”的编程输出中,则用来进。,在开关管打开的情况下,由输入电力供给电流,感应装置存储   Buck变换器是一种非隔离式的电压转换器[10]整流电路对输入电压进行整流,再经过滤波电路,即Dc电压是直流/直流变换器的直流输入。

QQ1694456187的博客 2307

《深度探索C++对象模型》读书笔记

 Inside The C++ Object ModelStanley B. Lippman 屋檐下的水滴--读书笔记系列http://blog.youkuaiyun.com/dwater 《深度探索C++对象模型》读书笔记                                                                          

DWATER 6126

[Ethernet in CANoe]2--如何在CANoe中去仿真CP版本的SOME/IP通信

上篇文章()介绍了SOME/IP的两种类型的数据格式,根据作者目前的项目经验,目前在CANoe V18之前的版本,CP版本的arxml是最方便实现SOME/IP以太网仿真的。作者目前只有CANoe V17的license,所以本片文章是在CANoe 17上基于CP版本的arxml去做仿真模拟。

汽车ECU自动化测试 1764

[读书笔记]《深度探索C++对象模型》

文章目录前言第一章 关于对象第二章 构造函数语意学构造函数拷贝构造函数初始化列表第三章 Data 语意学第四章 Function 语意学非静态成员函数静态成员函数虚成员函数第五章 构造、析构、拷贝语意学RTTI模板函数的实现逻辑 前言 俗话说得好,好记性不如烂笔头,本文主要是重温了一下经典书籍《深度探索C++对象模型》,然后一些内容摘录,主要记录的是我自己的精简版,建议读者有相关的知识需要还是慢慢去啃一下原书比较好。 第一章 关于对象 首先介绍了 C++ 类的情况, C++类的内存存储方式是:只包含非静态成

Chris_zhangrx的博客 1482

Ubuntu安装pytorch3d的最便捷方法【原创】

Ubuntu安装pytorch3d的最便捷方法

qq_54900679的博客 2923

【100%通过率】华为od机试C卷【小朋友来自多少小区】JS 实现

幼儿园组织活动,老师布置了一个任务:每个小朋友去了解与自己同一个小区的小朋友还有几个.我们将这些数量汇总到数组 garden 中。请根据这些小朋友给出的信息,计算班级小朋友至少来自几个小区?

MISAYAONE的博客 2004

《深度探索C++对象模型》笔记目录

读书笔记,特此记录。 😇😇😇 《深度探索C++对象模型》阅读笔记 第一章 关于对象 《深度探索C++对象模型》阅读笔记 第二章 构造函数语意学 《深度探索C++对象模型》阅读笔记 第三章 Data语意学 《深度探索C++对象模型》阅读笔记 第四章 Function语意学 《深度探索C++对象模型》阅读笔记 第五章 构造、解构、拷贝语意学 《深度探索C++对象模型》阅读笔记 第六章 执行期语意学 《深度探索C++对象模型》阅读笔记 第七章 站在对象模型的尖端...

哇咔咔的博客 364

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

问答学习《深度探索C++对象模型》系列

经过数次翻看《深度探索C++对象模型》和翻看别人的笔记,还是决定自己动手写一下该本书的笔记。笔记采用问答的方式是因为在UC实习时我的指导老师的影响:你不要为了看书而看书,你要从中学到东西就要带着疑问去学习。于是有了这一系列的笔记,感谢我的指导老师让我明白:生命不息,学习不止。 第一章:《深度探索C++对象模型》读书笔记之关于对象 第二章:《深度探索C++对象模型》读书笔记之构造函数语意学 第

冰枫的随笔 1335

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

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

[读书笔记] - 《深度探索C++对象模型》第5章 构造、解构、拷贝语意学

1.纯虚函数 纯虚函数可以被定义和调用,不过它只能被静态地调用,不能经由虚拟机制调用。 // 定义pure virtual function inline void Abstract_base::interface() const { } inline void Concrete_derived::interface() const { // ok: 静态调用 Abstract_base::interface(); } 要不要定义纯虚函数,全由class设计者决定。但是pure

浮生的博客 360

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

《深度探索C++对象模型》 读书笔记:第五章 构造、解构、拷贝语意学

class Abstract_base { public: virtual ~Abstract_base() = 0; virtual void interface()const = 0; virtual const char* mumble() const{ return _mumble; } protected: char* _mumble; }; 上面这个类的设计存在一个问题,虽...

junya_zhang的博客 311

[读书笔记] - 《深度探索C++对象模型》第2章 构造函数语意学

1.Default Constructor的建构操作 1.1C++ Annotated Reference Manual(ARM)中的Section12.1告诉我们:“default constructor...在需要的时候被编译器产生出来”。 class Foo { public: int val; Foo *pnext; }; void foo_bar() { // oops: 程序要求bar's members都被清为0 Foo bar; if(bar.val || .

浮生的博客 339

《深度探索c++内存模型》读书笔记 (四)

文章目录程序转化语意学明确的初始化参数的初始化返回值的初始化在使用者层面做优化在编译器层面优化拷贝构造需不需要自己实现?成员们的初始化队伍 程序转化语意学 明确的初始化 如果有这样的定义: X x0; X x1(X0); X x2 = x0; X x3 = X(x0); 都将会导致X的拷贝构造函数被调用。 参数的初始化 如果函数定义如下 void foo(X x0); X xx; foo(xx); X那么调用foo函数时,将会调用X类的拷贝构造函数,生成一个临时对象,如下: X temp; temp.X:

weixin_49265931的博客 254

《深度探索C++对象模型》 读书笔记 2:构造函数语意学

constructor 当编译器需要的时候,一个有用的(nontrivial)构造函数才会被声明出来,否则合成的是一个无用(trivial)的默认构造函数。 1.如果设计者设计的一个类的基类存在默认构造函数,该类的成员变量类带有默认的构造函数,但是没有提供构造函数,则编译器会为该类生成一个默认的构造函数,调用基类的默认构造函数(按照声明次序)和成员类默认的构造函数(按照声明次序),该成员函数时...

junya_zhang的博客 218

《深度探索C++对象模型》读书笔记第二章:构造函数语义学

《深度探索C++对象模型》读书笔记之 构造函数语义学 编译器背着程序员做了很多事,explicit关键字的导入,是为了制止“单一参数的constructor”被当作一个conversion运算符。这一章中,挖掘了编译器对于“对象构造过程”的干涉,以及对于“程序形式”和“程序效率”的冲击。 一.Defalut Constructor的构造过程 关键:是编译器需要(就会合成默认构造函数)...

yhcuac 935

【深度探索C++对象模型读书笔记】【第2章】构造函数语意学

一、Default Construct的构造操作 1、 C++ Standard说:对于一个类,如果没有用户定义的构造函数,那么会有一个默认构造函数被隐式声明出来,但这个构造函数是trivial constructor(没啥用的)。 2、 以下4种情况编译器会合成nontrivial default construct: a)  带有default constructor的member cl

ruan875417的专栏 794

《深度探索C++对象模型》读书笔记第五章:构造析构拷贝语意学

《深度探索C++对象模型》读书笔记第五章:构造析构拷贝语意学 对于abstract base class(抽象基类),class中的data member应该被初始化,并且只在constructor中或者在其他member functions中指定初值。 纯虚函数的存在 纯虚函数,虚函数在声明后加上 = 0,纯虚函数的意义在于只定义一个可继承的接口,并没有实现(虚函数意义在于定义一个可继...

yhcuac 1027

《深度探索C++对象模型》读书笔记之构造函数语意学

1、  一个类是不是一定有构造函数?  C++ Annotated ReferenceManual(ARM):构造函数只在需要的时候才会被编译器产生出来。关键字“在需要的时候”,被谁需要?一种是程序需要的时候,一种是变编译器需要的时候。如果程序有需要(如,完成某些非静态数据成员的初始化),那是程序员的责任,程序员需要自己提供构造函数。如果是编译器需要则才会合成出来默认构造函数。编译器不会替

冰枫的随笔 1354

阿龙的学习笔记---《深度探索C++对象模型》读书笔记(三)--- Data语意学

占用空间: 空的基类是1字节的大小,由于编译器需要使得不同的对象有不同的地址,以及其他因素,会给空的class一个char,分配空间。如果继承这个类,那么可能会占用这1字节的空间,但新的编译器可能会优化掉,比如在32位机器上,以下两种可能性: 同名: 外部声明的同名变量,一般会被class内部的变量覆盖。 内存中 顺序: non-static data members 在 class object 中的排列顺序将和其被声明的顺序一样。 ...

阿龙的博客 168

深度探索c++对象模型第二章读书笔记

2.2 Copy Constructor 的建构操作 有三种情况,会以一个object的内容作为另一个class object的初值。 1、对一个object做明确的初始化操作时; 2、当object被当做参数交给某个函数时; 3、当函数传回一个class object时。 如果程序员明确定义了一个copy construct函数,那么在大多数情况下,当一个class object以另一个实体...

Capr1corn的博客 261

第2章 构造函数语意学-《深度探索C++对象模型》读书笔记

该章主要包括以下内容:default construct 的构造操作,copy construct的构建操作,程序转换语意学。default construct 的构造操作主要讲述了如下内容:不太精确地说“如果没有为一个类提供构造函数,那么编译器将为你生成一个”,这句话是对的。如果一个类中的对象有默认的构造函数,如果一个类从一个有默认构造函数的类派生,如果一个类含有虚函数,如果一个类从

worldvacuum的专栏 338

《深度探索C++对象模型》读书笔记(二)

第二章讨论Constructor构造函数的工作原理:主要是默认构造函数和复制构造函数何时被编译器生成,给程序效率带来的意义。 其实觉得semantics这个词用得过于抽象了,而且贯穿全书,在书里翻译为“语意学”,应该指的是编译器对C++语法特性的语义分析吧。这一章读起来已经有点绕了,译者侯捷已经尽力复原作者的意思,但读起来并不连贯,有些地方读不通。

天才XLM的博客 471
上一篇: [读书笔记]深度探索C++模型_第一章_关于对象
下一篇: [读书笔记]深度探索C++模型_第三章_Data语意学
xy_cpp
博客等级 码龄10年 119粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值