自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(6)
  • 收藏
  • 关注

原创 程序转化语义

我们写的代码,编译器会对代码进行拆分,拆分成编译器更容易理解和实现的代码。看一看编译器是如何解析这些代码的。站在程序员角度/站在编译器角度 ,程序员看代码视角 和 编译器看代码视角之间不断切换。 (1)定义时初始化对象 #include <iostream> #include <time.h > using namespace std; class X { public: int m_i; X(const X &tmpx) { m_i = tmpx.m.

2020-10-26 22:25:18 748

原创 拷贝构造函数语义

传统上,大家认为:如果我们没有定义一个自己的拷贝构造函数,编译器会帮助我们合成 一个拷贝构造函数。这个合成的拷贝构造函数,也是在 必要的时候才会被编译器合成出来。 A mya1; mya1.m_test = 15; mya1.asubobj.m_testson = 120; A mya2 = mya1; 这个mya2.m_test = 15,这个其实是编译器内部的一个手法:成员变量初始化手法,比如int这种简单类型,直接就按值就拷贝过去,编译器不需要合成拷贝构造函数的情况下就帮助我们把这个事情办了

2020-10-26 22:15:04 174

原创 分析obj目标文件,构造函数语义

传统认知认为:如果我们自己没定义任何构造函数,那么编译器就会为我们隐式自动定义 一个默认的构造函数, 我们称这种构造函数为:“合成的默认构造函数” 介绍在windows下怎么看obj文件。 打开VS的本机工具命令提示符,用dumpbin命令把.obj文件内容导出成可查看文件my.txt,这个my.txt格式,一般被认为是COFF:通用对象文件格式(Common Object File Format); 编译器会在哪些必要的时候帮助我们把默认的构造函数合成出来呢? ...

2020-10-26 22:01:38 195

原创 this指针调整

派生类对象 它是包含 基类子对象的。 (1)如果派生类只从一个基类继承的话,那么这个派生类对象的地址和基类子对象的地址相同。 (2)但如果派生类对象同时继承多个基类,那么大家就要注意: 第一个基类子对象的开始地址和派生类对象的开始地址相同。后续这些基类子对象的开始地址 和派生类对象的开始地址相差多少呢?那就得把前边那些基类子对象所占用的内存空间干掉。 总结:你调用哪个子类的成员函数,这个this指针就会被编译器自动调整到对象内存布局中对应该子类对象的起始地址那去; #define _CRT.

2020-10-19 23:28:46 140

原创 类对象的组成结构图

类对象大小的计算: (1)静态数据成员不计算在类对象sizeof()内; (2)普通成员函数和静态成员函数不计算在类对象的sizeof()内 (3)虚函数不计算在类对象的sizeof()内,但是虚函数会让类对象的sizeof()增加4个字节以容纳虚函数表指针。 (4)虚函数表[vtbl]是基于类的(跟着类走的,跟对象没关系,不是基于对象的); (5)如果有多个数据成员,那么为了提高访问速度,某些编译器可能会将数据成员之间的内存占用比例进行调整。(内存字节对齐) (6)不管什么类型指针char *

2020-10-19 23:13:57 584

原创 类对象所占用的空间

类对象所占用的空间 (1)成员函数虽然也写在类的定义中,成员函数不占用类对象的内存空间; (2)一个类对象至少占用1个字节的内存空间,空类的大小为1字节; (3)成员变量是占用对象的内存空间; ...

2020-10-19 23:01:20 324

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除