You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何含虚成员函数的RegBaseA无法统一初始化,RegBaseB却可以?

问题解释

核心原因是C++里聚合类的判定规则在起作用:

C++标准明确要求,聚合类不能包含虚函数、用户自定义构造函数、基类、私有/保护的非静态数据成员等。只有聚合类才能直接用统一初始化列表({})来初始化它的公共成员。

具体看两个结构体:

  • RegBaseB:完全符合聚合类的所有条件,没有虚函数,属于聚合类。它里面的匿名union是公共成员,初始化列表{10}会直接给union里的value成员赋值,所以这种写法合法。
  • RegBaseA:因为声明了虚函数get_num_bits(),直接违反了聚合类的判定要求,所以它不是聚合类。同时这个结构体也没定义能接收int类型参数的构造函数,编译器找不到匹配的初始化方式,因此RegBaseA reg_a {10};会报错。

内容的提问来源于stack exchange,提问作者deponovo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 02:44:57