基类在被访问时初始化

Base class is unitialized while being accessed

本文关键字:初始化 访问 基类      更新时间:2023-10-16

以下代码:

#include <iostream>
struct A {
    int a;
    virtual int foo(){ std::cout << "foo()" << std::endl; return 5; }
    A(int a) : a(a){ }
};
struct B : A{
    B() : A(foo()){ }
};
int main()
{
    B b;
}

现场演示

产生关于

的警告
warning: base class 'A' is uninitialized when used here to access 'A::foo'

这是否意味着访问未初始化的基类会产生Undefined Behavior ?

在我的例子中,A::a得到了5的值,这是ok的

是的,这是未定义行为(IIRC),因为foo是一个虚方法。

如果foo不是虚的,行为将被定义,但在对象初始化之前调用该方法仍然是一个有问题的想法。