/images/avatar.png

[读书笔记]深入探索C++对象模型 第四章 Function语意学

第三章:Function语意学

Member的各种调用方式

Nonstatic Member Functions

C++的设计准则之一就是:nonstatic member function 至少必须和一般的nonmember function有相同的效率。 nonstatic member function会转换为nonmember形式。

  1. 改写函数原型,安插一个额外的参数,也就是this指针。
  2. 将每一个对“nonstatic data member的存取操作"改为经由this指针来存取。
  3. 将member function重写成一个外部函数,对函数名称进行“mangling"处理,使它在程序中成为一个独一无二的词汇。
1
2
3
4
5
6
7
8
void normalize__7Point3dFv(register const Point3d *const this,
                                                Point3d &__result)
{
    register float mag = this->magnitude();
    __result.Point3d::Point3d();
    
    __result._x = this->_x/mag;
}

[读书笔记] 深入探索C++对象模型 第三章 Data语意学

第三章:Data语意学

class的大小: 内存对齐 空Class需要1byte来占位,说明是独一无二的存在 有虚函数时候会有虚表指针 static 成员不属于类对象,不占空间

Data Member的绑定

早期的编译器可能看不到Class后面的内容,导致数据成员的用了外层的同名的。现在已经没有这种情况了。

1
2
3
4
5
6
7
8
typedef long long length;
class Point3d
{
public:
    length x;//是long long
    typedef int length;    
    length y;//是 int
};

[读书笔记]深入理解C++对象模型 第二章 构造函数的语意学

第二章:构造函数语意学

由于C++的编译器在程序员之外做了太多事情,导致会产生很多意料之外的错误。 例子 Conversion运算符。

1
2
3
4
5
6
7
8
9
//为了支持
if(cin);
//定义了一个perator int()
//但是导致了以下错误的代码能够正常运行
int inVal;
cin << inVal;
//此处<<被解释为左移操作符
int temp = cin.operator int();
temp << intVal;

Default Constructor的构建操作

默认构造函数只在编译器认为需要的时候才创建。

1
2
3
4
5
6
class Foo{public: int val; Foo *pnext};
int main()
{
    Foo test;
    return 0;
]

这种情况实际没有默认构造函数,编译器什么都没做。

[读书笔记]深入探索C++ 对象模型 第一章 关于对象

阅读的目的

在阅读《C++ primer》的时候,书里面写了各种各样的情况下,C++的处理方式。囫囵吞枣的记下后,也就不求甚解了。而C++在工作中的使用已经有了那么一段时间。但是对于C++的很多现象,却依旧是只知道是这样,却不知道为什么是这样。 那么阅读这本同样是 Lippman的书籍,就是为了解惑,为什么C++会导致我们看到的现象,而不是其他情况。 我希望,通过这么本书,能够解答我的一部分疑问。

工作里常听到的对于C++的抱怨是C++的编译器为程序员做了太多的服务,导致很多情况不受控制。不像C,大部分都需要手动去执行,可以明确的知道,什么时候做了什么。 我想这部分抱怨一方面来源于对于C++的不熟悉,一方面又来源于C++的特性。那么当对C++怎么实现各种特性了解后,对于编译器的行为有了概念后,我相信我应该能够解答很多疑问了。 就像Lippman在本书贴出的一封信件一般

他希望这本书是这些问题的解答。

[读书笔记] 《如何阅读一本书》

阅读的活力与艺术

阅读存在很多个层次:娱乐、获取资讯、加深理解力。 本书更多的是为了读者能够加深理解力而写的书籍,教导人们如何通过各种手段,来阅读一本值得阅读的书籍。 阅读是一种主动的学习方式。而教师的教导等方式更多的是被动的接受。阅读作为主动的学习方式。这里的主动是你主动去获取知识,比如编程的书籍,看了不代表主动,需要更多的实践,这就是主动。不断的去实践、检测书籍中的内容,这样才能够对于艰深的书籍有更多的理解。

作者的观点里存在四个阅读的层次:(这里的层次更多的是阅读方法上的分类)

基础阅读

基础阅读:认识字,能够读大部分读物,能够大概的描述阅读的内容说的是什么。

检视阅读

这一个层次要求能够快速的、准确的通过各种方式抓住一本书的重点。 分为两类 有系统的略读: 1、看书名、序言。了解整个书讲的什么。 2、研究目录,对书的骨架有了了解。 3、看索引,能够快速的知道本书内容的范围。 4、阅读其他人写的介绍。 5、抽取部分篇章阅读。 6、不要忽略最后几页 粗浅的阅读: 1、快速的阅读,即使对很多内容不理解也要将书籍读完。这样才不会停滞不前。 2、提高阅读速度的方式,不断移动眼球,不要后退暂停。大脑要跟上阅读的速度。 3、需要判断不同的书籍类型,不同的种类使用不同的阅读速度。