考虑方案:理解基类的初始化
#include<iostream>
#include<vector>
struct A
{
int a;
A(int) { }
virtual int foo(){ std::cout << "base" << std::endl; return 5; }
};
struct B : A
{
int b;
B(): b(9), A(foo()) { }
virtual int foo(){ std::cout << "derived" << std::endl; return 6; }
};
B b; //prints derived
int main(){ }
斯科特迈尔斯在他Effective C++
说,大约是什么:
在基类构造一个派生类的对象,类型为 的对象是基类的对象。
因此,我预计base
将被打印,因为我们在调用foo
函数时处于基类的构造之下。我错过了什么?也许这是UB?如果是这样,请指出相关部分。
所以它不是UB,不是吗? –
@ St.Antario,更新 – ixSci
有趣。所以,如果我们想从ctor调用成员函数,我们应该声明它是静态的,对吗? –