我记得在一本C++书中(相当长时间之前)阅读到过,特别是对于派生类,使用内联构造函数和析构函数并不是一个好主意。 我明白内联会导致目标代码膨胀,但还有其他设计上的考虑因素吗?当然,大多数编译器可能会拒绝内联并继续创建函数体,但如果它们内联化了,我们可能要付出什么代价?
我记得在一本C++书中(相当长时间之前)阅读到过,特别是对于派生类,使用内联构造函数和析构函数并不是一个好主意。 我明白内联会导致目标代码膨胀,但还有其他设计上的考虑因素吗?当然,大多数编译器可能会拒绝内联并继续创建函数体,但如果它们内联化了,我们可能要付出什么代价?
register
和volatile
;现代编译器对这些建议进行了自由处理。 - s1nvolatile
变量,存在一些限制条件,这意味着这种变量将保持 volatile
。在这方面,volatile
不是一个建议性的修饰符。 - didiercinline
实际上会指示编译器将方法定义内联。它只是一个链接修饰符,仅此而已。 - Andy Brown我不知道构造函数,但析构函数往往是虚函数
。在大多数情况下,编译器不会将虚函数内联,因为在运行时不知道将调用哪个覆盖。
inline
(OP似乎也不是)。我说的是编译器是否会选择内联一个函数。我不确定OP的书想表达什么意思,这只是我的猜测。析构函数很常见地是虚函数,并且很常在多态上下文中调用。但并非总是如此。我不确定哪一部分是令人难以信服的! - Oliver Charlesworth绝对没有任何理由避免使用内联构造函数和析构函数。这本书是错误的,完全错误。
我相信这与C++对代码的处理无关,因为它只是一个提示。
如果你开始考虑软件工程方面的事情,一切都会改变。所有内联函数的更改都将强制重新编译所有依赖文件。
当你维护一个库并想要发送一个修复bug的版本时,情况会变得更糟。内联函数不能简单地被另一个版本替换,因为调用代码可能没有重新编译。因此,当需要更改内联函数时,你必须移动到新版本的接口,而非内联函数可以随意替换。
再加上构造函数很少能够被编译器实际内联,那么我可以想象为什么书会给出提到的建议。