基类在被访问时被单元化

时间:2015-10-13 04:30:06

标签: c++ class initialization

以下代码:

#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;
}

LIVE DEMO

发出关于

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

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

就我而言,A::a获得了值5,而且没问题。

1 个答案:

答案 0 :(得分:2)

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

如果foo不是虚拟的,则会定义行为,但在初始化对象之前调用该方法仍然是一个值得怀疑的想法。