《深度探索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++有了更多理解再来续写。

posted @ 2023-05-04 15:17  Hell0er  阅读(14)  评论(0)    收藏  举报