内联子类构造函数,是否同时内联父类构造函数?

C++中,内联是在编译阶段,构造和析构是在运行阶段。那么如果对子类的构造函数内联,在调用子类的构造函数时,是否会同时将父类的构造函数内联呢? 侯捷的书推荐构造和析构不要内联,因为会调用父类的函数,代码比看起来更复杂

应该是不会的。这个你看下生成的机器码

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/229904
  • 你也可以参考下这篇文章:子类内部调用父类成员函数,及子类对象在外部调用父类成员函数问题(C++)
  • 除此之外, 这篇博客: 2020秋招 C++软件开发/游戏开发 面试知识整理汇总中的 如果父类和子类定义了一个函数名相同的函数,但不是虚函数,问父类指针指向的子类对象,调用这个函数是调用父类还是子类函数?同样,如果子类指针指向父类的对象,调用这个函数是调用父类还是子类函数?讲述一下它的原理 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 如果基础类和衍生类定义了相同名称的成员函数,那么通过对象指针调用成员函数时,到底调用那个函数要根据指针的原型来确定,而不是根据指针实际指向的对象类型确定。同时,父类指针可以指向子类指针,而子类指针不能指向父类(可以C风格强转得到)。

    虚函数重写(覆盖)的实质就是复刻一张父类虚函数表,并根据内部实现修改表中对应虚函数的地址;

    当父类指针指向子类对象时,可以调用父类的所有东西,因为这些都被继承了;但是对于父类中的虚函数,其仍会调用子类的重载函数,因为此时被继承的虚函数指针指向的虚函数表已经被换成了子类的虚函数表

    当子类指针指向父类对象时,可以调用子类继承父类的东西,但是不能调用子类自身的东西(因为没有,所以通常不允许这种情况发生),对于虚函数同上,此时指向的内存中的虚函数表仍为父类的虚函数表

    4. 模板相关