摘要: 1.内联inline是一个请求,编译器一般会评估函数是否值得内联或者能够内联,如果满足内联条件则编译器会对函数进行内联处理。 2.处理一个内联函数一般有两个阶段: (1)分析函数定义以决定函数的本质的内联能力(intrinsic inline ablitity) 函数如果因为其复杂度或构建原因被判断 阅读全文
posted @ 2021-06-24 17:35 放不下的小女孩 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 1.指向作用域运算符(书里叫成员选择运算符)"::"的指针的作用是保存this指针。所以静态成员函数指针(没有this)的类型是函数指针,而不是成员函数的指针。 2.指向成员函数的指针有两种功能:①调用普通的成员函数②调用虚成员函数 对前者取地址得到的是该函数在内存中的真实地址,而后者取地址得到的是 阅读全文
posted @ 2021-06-24 12:32 放不下的小女孩 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 一、单继承情况 1.虚函数表、指向虚函数表的指针以及类型信息: ①为了实现多态,我们需要知道一个指针或引用的真实类型以及其所调用函数实例的位置。所以编译器会创建一个虚函数表,里面存放类的类型和类函数的实例地址,并且在类内存中加入一个指向虚函数表的指针vptr。(为什么不放到类中?导致类的内存不固定, 阅读全文
posted @ 2021-06-23 21:36 放不下的小女孩 阅读(534) 评论(0) 推荐(0) 编辑
摘要: 一、非静态成员函数: 1.改写函数的signature(函数名,函数参数个数,函数参数):①增加this指针作为参数。②将函数内部对成员的访问改写成经由this指针访问③将成员函数重新写成一个经过mangling的外部函数。 2。Name Mangling:函数的名字被编译器修改成内部使用的名字,用 阅读全文
posted @ 2021-06-23 12:06 放不下的小女孩 阅读(94) 评论(0) 推荐(0) 编辑
摘要: 一、非多态继承 1.派生类中每个基类的子对象都要保持其完整性,即每个子对象都与独立对象内存布局相同,都会经过alignment(会造成代码膨胀) class Concrete1{ public: //…… private: int val; char bit1; }; ​ class Concret 阅读全文
posted @ 2021-06-22 11:42 放不下的小女孩 阅读(63) 评论(0) 推荐(0) 编辑
摘要: 一、类成员的布局 1.静态数据成员布局在全局变量区。不同类的同名静态成员变量,编译器会对其进行编码来进行区分。 2.非静态成员的布局要求:在同一访问域(pubiic、private和protect)中后出现的成员在类对象中要有较高地址。(所以地址不一定连续、中间会有边界调整alignment产生的内 阅读全文
posted @ 2021-06-21 12:17 放不下的小女孩 阅读(50) 评论(0) 推荐(0) 编辑
摘要: 现在编译器编译类时按照如下顺序: ①类成员的声明 ②成员函数的函数体在类全部可见后开始编译 而类成员的编译顺序则按照成员在类中的声明顺序进行编译,其中类成员包括:①数据成员②成员函数③嵌套类型(nested type)④枚举成员⑤模板成员。 由于成员函数的声明包括返回类型,函数名和形参列表。所以其中 阅读全文
posted @ 2021-06-19 12:33 放不下的小女孩 阅读(63) 评论(0) 推荐(0) 编辑
摘要: 1.普通空类(空类,单一继承的空类,多重继承的空类)的大小:一般编译器会插入一个char(1byte)作为标识,使不同类获得独一无二的地址。(只有空类占一个char,虽然他的基类也是空类但是现在的编译器一般不会为他分配一个char,因为这样没有意义) 2.含有虚基类的空类的大小:受三个因素影响 ①语 阅读全文
posted @ 2021-06-18 19:38 放不下的小女孩 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 记录一下第二章成员初始化列表的笔记 1.使用条件:构造函数中 2.使用情形:下列四种情况必须使用成员初始化列表 ①初始化一个引用成员时 ②初始化一个常量成员时 ③调用一个基类的构造函数,而他拥有一组参数时 ④调用一个成员类的构造函数,而他拥有一组参数时 3.编译器对初始化列表所做的工作 编译器将初始 阅读全文
posted @ 2021-06-17 16:16 放不下的小女孩 阅读(67) 评论(0) 推荐(0) 编辑
摘要: 记录一下第二章的第二部分笔记 一、拷贝构造函数 1.拷贝构造函数的生成: 同默认构造函数一样,概念上编译器会在需要调用拷贝构造函数时生成一个合成的拷贝构造函数,但实际上仅为有意义nontrival的类生成,对于trivial的类则使用逐比特拷贝bitwise copies(我理解为简单的将成员变量复 阅读全文
posted @ 2021-06-16 22:18 放不下的小女孩 阅读(93) 评论(0) 推荐(0) 编辑