【发布时间】:2014-09-02 15:26:57
【问题描述】:
我知道在构造函数中调用虚函数会导致未定义的行为。 但是,使用作用域修饰符调用虚函数可以吗?
class A
{
public:
A() { A::f(); }
virtual void f();
};
class B
{
public:
B() { B::f(); }
virtual void f();
};
我认为这和调用非虚函数没有什么不同,也没有任何问题。 这样对吗?还是我忽略了什么?
【问题讨论】:
-
可以,但不会进行虚拟调度。不过,我还没有听说 UB 是由正常调用它们引起的。
-
构造函数的虚拟调用的行为没有任何未定义的地方。
-
注意:在构造函数中调用虚函数并不是未定义的行为(可能是意料之外的)
-
@chris: 如果你调用一个没有实现的纯虚函数,可能会有未定义的行为......
-
@MooingDuck,非常正确。
标签: c++ constructor virtual