You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

内联子类构造函数时,父类构造函数是否也会被内联?

关于C++中内联构造函数的两个问题解答

子类内联构造函数调用时,父类构造函数会被内联吗?

首先要明确:inline 是编译阶段的优化建议,编译器最终是否内联某个函数,取决于函数本身的特性(比如是否过于复杂、是否被多处调用等)以及编译器的优化策略。

当子类构造函数被标记为 inline(或定义在类内部,默认视为inline)时:

  • 如果父类的构造函数本身也是 inline(比如同样定义在类内,或者显式声明了 inline),且编译器认为它适合内联,那么父类构造函数会和子类构造函数一起被展开到调用点,也就是会被内联。
  • 如果父类构造函数不是 inline(比如定义在类外且没有加 inline 关键字),哪怕子类构造是内联的,父类构造函数依然会以普通函数调用的方式执行,不会被内联。

简单说:父类构造是否被内联,只看它自己是否满足内联的条件,和子类构造是否内联没有强制绑定关系。

为什么不建议将构造/析构函数设为inline?

正如侯捷老师书中提到的,构造和析构函数的实际代码量远大于表面所见:

  • 构造函数会隐式调用所有父类的构造函数,以及所有非内置类型成员变量的构造函数;如果类有虚函数,还会涉及虚表的初始化操作。
  • 析构函数同理,会隐式调用父类析构函数和成员变量的析构函数,虚析构还会有额外的虚表处理逻辑。

如果把这类函数设为 inline,编译器展开后会生成大量冗余代码,不仅增加可执行文件的体积,还可能降低代码缓存的命中率,反而影响运行性能。另外,复杂的隐式逻辑被展开后,也会增加代码的维护成本。

内容的提问来源于stack exchange,提问作者Li Jinqi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 23:28:13