当前位置: 首页 > 知识库问答 >
问题:

C 14中标准布局类的定义

严昀
2023-03-14

C 14的[class]/7中定义了一个标准布局类,如下所示(重点是我的):

标准布局类是这样的类:

  • (7.1)-没有非标准布局类(或此类类型的数组)或引用类型的非静态数据成员,
  • (7.2)-没有虚拟函数(10.3)和虚拟基类(10.1),
  • (7.3)-对所有非静态数据成员具有相同的访问控制(第11条),
  • (7.4)-没有非标准布局基类,
  • (7.5)-在大多数派生类中没有非静态数据成员,并且最多有一个基类具有非静态数据元素,或者没有具有非静态元素的基类,并且
  • (7.6)-没有与第一个非静态数据成员相同类型的基类

我关心的是与第7.5条相关的问题:怎么可能在大多数派生类中没有非静态数据成员,同时又有一个包含非静态数据成员的基类?

换句话说,基类的非静态数据成员不是也是最派生类的非静态数据成员吗?

共有1个答案

姬正文
2023-03-14

是的,这是C 14,特别是CWG 1813中的一个缺陷。尽管可以通过读取“非静态数据成员”来修复它,以仅引用直接(非继承)非静态数据成员(这在其他地方可能是必要的),但选择的修复方法是将您发现有问题的语言替换为以下内容:

标准布局类是这样的类:[...]

  • 类及其基类中的所有非静态数据成员和位字段首先在同一类中声明,[…]

这是一个有点棘手的权利;尽管[class.derived]具有以下特性,但是对于将继承成员视为派生类成员的想法还是有一些抵触:

除非在派生类中重新声明,否则基类的成员也被认为是派生类的成员。除构造函数之外的基类成员被称为被派生类继承。

尽管如此,在许多地方,直接和继承的非静态数据成员都将被视为特别调用继承的数据成员,例如在[类]中(在CWG 1672决议之后):

8.6 -聚合或联合类型,在其元素或非静态数据成员(递归地包括子聚合或包含联合的元素或非静态数据成员)中包括上述类型之一,

或者在[basic.lval]中:

7.8 -如果X是非联合类类型,如果X没有(可能继承(第10条))非静态数据成员,则集合M(X)为空;[...]

同时,在许多地方,成员必须被理解为仅指直接成员才有意义;首先,并且只查看非静态数据成员(不是成员函数),[ /27]/3.2、[ /15.2]/5.1、[ /15.3]/4.6、[class.mem]/17、 /19、[特殊]/5、[class.ctor]/4.3、 /4.4、 /4.10、 /4.12、[class.dtor]/5.6、[class.base.init]/2、 /13.3、[class.copy]/12.2、 /12.4、 /18.2、 /25.2、 /25.4、 /26.3、expr.rel、[except.spec]/15.1.1.1、expr.const、dcl.constexpr都是“非静态数据成员”可以或应该有“直接”前缀的地方。

另一方面,在某些地方(例如在修改后的[class]中,或者在[class.copy]/23.2-23.3, /28中)“成员”被隐式地认为包括继承的成员,所以有点乱。

 类似资料:
  • Material Design 使用的基本工具来源于印刷设计,例如通用于所有页面的基准线和删格。布局排版能够按比例横跨不同尺寸的屏幕,促进 UI 开发和从根本上帮助你做可扩展的 apps。 布局指南也通过使用相同的视觉元素,结构网格,和通用的行距规则,让 app 在不同平台与屏幕尺寸上拥有一致的外观和感觉。结构和视觉上的一致创造了一个可识别的跨平台产品的用户环境,它给用户提供高度的熟悉感和舒适性,

  • 为什么C 17下< code>bar不是标准的布局类型? 基于CPP reference的描述和一个非常相似的问题,我理解为什么在C 14之前这不是一个标准的布局类型,但是我无法连接CPP Reference的描述项,通过排除所有其他内容,应该是适用于这里的一个:“没有一个基类子对象具有与非联合类型相同的类型,作为第一个非静态数据成员(参见空基优化),并且,递归地, 该数据成员的第一个非静态数据成

  • 我有一个自定义标记处理程序test/StubCTag。java,它是一个simpletag。有一个测试。定义ctag的tld文件:- 当打包为jar存档时,文件的布局如下:- 在带有前缀testprefix的jsp页面中使用自定义标记时,浏览器会显示标记“testprefix:StubCTag”的“无法加载标记处理程序类”test.StubCTag。我已经仔细检查了归档文件,tld和类文件都存在。

  • 有没有办法为不同的日志级别打印不同的布局?例如: 记录器。警告(“消息”);打印如下内容:2016-06-20 13:34:41245 INFO(main:)Message and for logger。信息(“消息2”);仅打印:消息2 有可能做到吗?定义一个布局以警告其他布局以获取信息 log4j.properties

  • 我正在使用PreferenceActivity设置我的应用程序。我想添加一个新的首选项,允许用户选择一个图标。对于这个任务,我想使用ListPreference,但我也想在列表中显示图标。 我尝试自定义List首选项以使用自定义布局,但问题是一旦我这样做了,列表项就不可单击(它确实显示了我的自定义布局并使用当前选择的默认值)。 我在不同的模拟器版本和银河S2上测试了它。当按下项目时,我可以看到一些

  • 1.1. Rokid技能发布标准 1.1.1. 商标,知识产权和品牌 1.1.2. 健康相关 1.1.3. 收费相关 1.1.4. 广告 1.1.5. 色情、暴力 1.1.6. 宗教,种族和文化 1.1.7. 内容 1.1. Rokid技能发布标准 该标准适用于所有提交至Rokid开发者社区审核的公有技能(私有技能的要求不在本审核标准范围内)。本标准的内容会随着开发者社区的建设而不断完善。 如果您