基 class 在访问时未初始化
Base class is unitialized while being accessed
以下代码:
#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'
这是否意味着在未初始化时访问基 class 会产生 Undefined Behavior
?
在我的例子中,A::a
得到了值 5
,没问题。
是的,这是未定义的行为 (IIRC),因为 foo
是一个虚拟方法。
如果 foo
不是虚拟的,将定义行为,但是在对象初始化之前调用该方法仍然是一个有问题的想法。
以下代码:
#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'
这是否意味着在未初始化时访问基 class 会产生 Undefined Behavior
?
在我的例子中,A::a
得到了值 5
,没问题。
是的,这是未定义的行为 (IIRC),因为 foo
是一个虚拟方法。
如果 foo
不是虚拟的,将定义行为,但是在对象初始化之前调用该方法仍然是一个有问题的想法。