概述
问题
类成员函数添加inline关键字的原因是什么,为什么存在?
为什么存在?
Bjarne在《The Design and Evolution of C++ 》中描述“带类的C”时有相关介绍:
将inline函数引进带类的C,直接原因是一个具体的项目。在该项目中,由于某些类与实时处理有关,这种函数调用的开销是无法接受的;为了使类机制能够成为在这个应用中有用的东西,就要求在跨越保护屏障时不付出任何代价。只有在类声明中提供一种可用表示,并能把对公用(界面)函数的调用变成在线的(inline),才可能达到这个目的。
所以在对类的使用上,inline被认为是非常中重要的机制;
为了满足C++的设计准则之一:
只提供一个特征是不够的,还必须以一种实际上可以负担得起的形式来提供它。在这里,可以负担得起意味着”使用常见硬件的开发者可以负担”,而不是”使用高端设备的研究者可以负担”或者“若干年之后,当硬件变得更便宜之后就可以负担”。
总结一下归到零开销抽象上。
设计与使用
为了提供在线机制,有两种策略:
- 把在线问题留给编译程序去做,因为“编译系统对事情了解的最清楚”。
- 程序中写出要求在线,编译程序有了时间/空间优化的概念时,在进行在线处理。
C++使用了第二中策略,然类的成员函数做成在线的方式有如下两种写法:
// 第一种写法
class stack {
/*...*/
char pop() {
if (top <= min) error("stack overflow");
return *--top;
}
};
// 第二种写法
class stack {
// ...
char pop();
};
inline char stack::pop() {
if (top <= min) error("stack overflow");
return *--top;
}
注意:这种inline指示字只不过是一种提示,编译系统可以去做,常常也会忽略它们。这一点在逻辑上是必需的。因为某人可能写出一个递归的在线函数,在编译时无法证明它不会导致一个无穷递归,试图将这类东西变成在线的就会引起无穷的编译。让inline作为一种提示在实践中也有优势,因为这样可以使写编译系统的人更容易处理各种"病态"情况,对他们简单地不做在线处理。
最后
以上就是温婉金毛为你收集整理的c++类成员函数的inline属性问题为什么存在?设计与使用的全部内容,希望文章能够帮你解决c++类成员函数的inline属性问题为什么存在?设计与使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复