考虑到一个虚拟调用T
来自类的构造函数的成员函数(直接或间接)T
,最多可以下降到T
的实现,执行以下代码,其中不合格的电话,是否有未定义的行为?
请注意,为了避免噪音:如果您认为从构造函数调用时实际上不会调用成员函数,那么请不要在此处回答或评论,而是在单独的 SO 问题中提出该问题。谢谢。
struct Baze
{
virtual void foo();
virtual void bar() = 0;
Baze(){ foo(); bar(); }
};
void Baze::foo() {}
void Baze::bar() {}
struct Derived: Baze
{
void bar() override {}
};
int main()
{
Derived{};
}
我相信这涵盖了[class.abstract]/6
(N4140):
可以从抽象类的构造函数(或析构函数)调用成员函数;制作的效果
直接或间接为正在创建(或销毁)的对象调用纯虚函数(10.3)
这样的构造函数(或析构函数)是未定义的。
因此,即使您提供了纯虚函数的定义,它在技术上仍然是 UB。
有一个核心工作组问题可以解决这个问题here http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#230。规则似乎不太可能改变以使其得到明确定义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)