深度探索C++对象模型 9.1分
读书笔记 函数的语意处理
crydby

1.所有个名字都会被处理,为了不冲突 成语变量的名字,成语函数的名字等等都会被处理 如加上类名等等 还不知道具体的标准 2.非静态成员函数会被转化为非成语函数 加上extern关键字,名字处理,加上this指针等等 3.vptr会被处理,因为复杂的继承体系会有多个vptr ptr->normalize() (* ptr->vptr[1])(ptr) 1.vtable的索引值关联到某个虚函数 2.第2个ptr表示this指针 3.静态成员函数呢 也会转为一般的函数,当然名字会处理 这下面有些麻烦 no public 的 static member 不属于某个对象,只属于类.所以不需要this指针来绑定到具体对象的成员,可以补考具体对象来存取成员 然而必须提供1个或者多个静态成员函数来存取他,但是这个静态成员函数实际上也会转化为普通函数,仍旧需要将函数绑定具体的函数对象上,因此程序方法的解决是吧0强制转化成1个class指针 ,提供了1个this指针实体 语言上的解决是静态成员函数没有this指针,因此 有这个特性出现许多特性 1.静态成员函数不能存取类中非晶态成语变量 2.不能被声明为consst volatile virtual 3.不需要具体的class对象来调用 - 虽然实际上转化了 另外之所以我们可以通过 Point::Count()调用 是因为mangled(名字处理)往往是这样 静态函数count被处理成了这样_count_Pointsfv;... sfv 表示他是静态成员函数,拥有空白的参数表 如果你去取静态成员函数,去到底不是指向成员函数的地址,而是一个非成员函数的地址. 结论 静态成员函数没有this指针,差不多就等于1个普通的非成员函数. 还有虚拟成员函数... 暂时不管了,已经解答了我以前的迷惑,static函数是怎么去找到并调用的,没有this指针.\ 挂个图

0
《深度探索C++对象模型》的全部笔记 32篇
豆瓣
免费下载 iOS / Android 版客户端