以下代码:
#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
,而且没问题。
答案 0 :(得分:2)
是的,它是未定义的行为(IIRC),因为foo
是一种虚方法。
如果foo
不是虚拟的,则会定义行为,但在初始化对象之前调用该方法仍然是一个值得怀疑的想法。