【发布时间】:2020-08-17 08:59:18
【问题描述】:
我知道禁止从基本 ctor 调用虚拟函数,这是有原因的。但是,如果 func 是“非常 const”,我认为,这些原因变得无关紧要。 “Very const”表示该函数直接替换为常量,如下所示:
Color Derived::getColor() const
{
return Color(0, 255, 0); // no member usage, no member function calls -
// only return
}
(我使用函数是因为我需要它的虚拟性。)我可以告诉编译器这个函数是“非常常量”吗? (它可以让我从 ctor 调用这个函数。)
【问题讨论】:
-
你试过
constexpr Color Derived::getcolor() const吗? -
不管你做什么,vtable还没有被基类构造函数中的派生类方法填充
-
@Victor 是的,我试过了,virtual funcs 不能是
constexpr,而consexpr并没有禁止函数读取成员。 -
从语言的角度来看,从基础构造函数调用虚函数是不被禁止的。它是合法的,并且它的效果是明确的。它几乎总是不是你想要的,所以可能是某些编码指南禁止它。
标签: c++ constructor virtual-functions function-call