提问人:deponovo 提问时间:11/17/2023 最后编辑:deponovo 更新时间:11/18/2023 访问量:78
虚拟成员函数不允许统一初始化 [duplicate]
Virtual member function disallow uniform initialization [duplicate]
问:
为什么默认初始化是可能的,但不能:RegBaseB
RegBaseA
struct RegBaseA
{
union {unsigned int value;};
virtual unsigned int get_num_bits() const {return 32;};
};
struct RegBaseB
{
union {unsigned int value;};
};
int main()
{
// RegBaseA reg_a {10}; // not allowed
RegBaseB reg_b {10};
}
答:
-1赞
possum
11/17/2023
#1
您所拥有的简单初始化之所以能够使用,是因为编译器不需要“执行”任何操作来设置它。在写入二进制文件之后,无需计算或初始化值。 与旧的 C 风格的“普通旧数据类型”非常相似,它们只是内存中的固定布局。B
B
A
确实有效,因为它需要设置一个动态(读取“运行时”)调度表,以便在声明时找出正确的函数。virtual
4赞
Oersted
11/17/2023
#2
RegBaseB
满足聚合初始化的标准,但不符合具有虚拟功能的标准。RegBaseA
由于您声明了没有特殊构造函数,因此编译器正在尝试聚合初始化,此处将其识别为聚合初始化。RegBaseB reg_b {10};
评论
0赞
deponovo
11/17/2023
谢谢。我现在在文档中看到.我在哪里可以进一步研究为什么会这样?An aggregate is one of the following types: [...] no virtual member functions
评论