C++ 基类在被访问时被单元化

C++ 基类在被访问时被单元化,c++,class,initialization,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; } 这是否意味着在基类未初

以下代码:

#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;
}
这是否意味着在基类未初始化时访问它会产生
未定义的行为


在我的例子中,
A::A
得到了值
5
,它没有问题。

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


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

如果
foo
访问
A
的任何成员变量(现在可能不存在,但以后可能存在),则可以获得未定义的行为。如果
foo
成为一个虚拟函数,或者调用一个虚拟函数,你会得到非常令人惊讶的结果。当我们将“a”作为a::a的静态变量时会发生什么情况?@vishal程序将不再编译,因为静态成员不能列在构造函数初始值设定项列表中。感谢您的知识:)
warning: base class 'A' is uninitialized when used here to access 'A::foo'