《深度探索C++对象模型》第4章 Function语意学
static member function:
(1)不能直接读取nonstatic数据
(2)不能被声明为const
1.成员函数的各种调用方式:
(1)非静态成员函数:C++会保证至少和一般的普通函数有相同的效率,三个步骤:
①改写函数,安排一个额外的参数(this指针)到函数中,用来提供一个存取管道
②对每个nonstatic member的存取操作改成使用this指针
③将成员函数改写成一个外部函数,并且改写名称为独一无二的
(2)虚拟成员函数:类似的转化。如:

(3)静态成员函数:因为没有this指针,所以有如下限制:
①不能直接存取类中的非成员变量
②不能被声明为const、volatile和virtual
2.指向成员函数的指针
对于普通的成员函数,编译器会将其转化为一个函数指针,然后用成员函数的地址去地址化。如:
调用方式:

3.Inline Functions
inline只是向编译器提出一个请求,是否真的优化取决于编译器的判定。
对于形参,会采用:
- 常量表达式替换
- 常量替换
- 引入临时变量避免多次求值操作
对于局部变量,会采用:
- 使用临时变量
结束语:
重新复习这一章时我对inline产生了更多的疑惑:既然inline只是向编译器提出一个请求,那我们是否还有必要在函数前加"inline"呢?编译器是否会对没有加"inline"的函数采用优化策略呢?我在知乎上寻找答案时发现大家对此各执一词,好吧╮(╯▽╰)╭。浏览一圈后发现inline原来是个深坑,尤其是将它与static混合起来后,坑之深更是不忍直视,我直接弃了。。。以后有时间再来探索吧。
本书的读书笔记到第4章就暂且结束了,因为后面的内容以我目前的能力还不好理解,(而且听说作用有限?),希望工作后对C++有了更多理解再来续写。
浙公网安备 33010602011771号