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

C 14中[类]/7中项目符号点(7.5)的目的是什么?

宰父疏珂
2023-03-14

这基本上是我之前问题的延续。

这是C 14中的[class]/7:

标准布局类是这样的类:

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

请考虑以下代码段:

struct B{ int i; };
struct A : B{ int j; };

A满足要点(7.1)到(7.4),但不满足(7.5),因为A有一个非静态数据成员,并且有一个基类和一个非动态数据成员。

A是标准布局类的问题是什么?

编辑

据我所知,对于这个问题被认为是欺骗的问题的公认答案,如果我尝试将指向A的指针投射到基类B的第一个数据成员并返回,则上面的代码段将具有未定义的行为,因为OP编写的这句话:

< code >在一个类中,根据声明顺序以递增的地址分配成员。然而,C并没有规定跨类的数据成员的分配顺序。

但这似乎没有回答我的问题。例如,假设在某个编译器实现中,baseB将在内存中跟随struct A,而不是在它之前。但这将与一个事实相矛盾,即根据[conv.ptr]/3,从指向派生类的指针到指向基类的指针存在隐式转换:

“指向cv D的指针”类型的prvalue,其中D是一个类类型,可以转换为“指向cv B的指针”类型的prvalue,其中B是D的基类(第10条)。

也就是说,如果基 B 在内存中跟随结构 A,则上述隐式转换将无效。

共有1个答案

段干楚青
2023-03-14

直接回答以下问题:

这个项目符号的目的是允许非常简单的继承情况,其中只有一个类具有数据成员。

继承的数据布局是未指定的,因此标准可以完全禁止继承,但如果一个类没有数据将结果视为标准布局,则标准会例外。

 类似资料:
  • 本文向大家介绍Java eclipse项目中项目的类路径是什么?,包括了Java eclipse项目中项目的类路径是什么?的使用技巧和注意事项,需要的朋友参考一下 您可以使用构建路径在eclipse项目中包含需要设置类路径的Jar文件 步骤1- 右键单击项目选择构建路径→配置构建路径。 步骤2-选择库,选择添加外部JAR ...按钮。 步骤3-然后浏览所需的jar文件所在的文件夹,选择它们并按打开

  • 问题内容: 所以我有一个我想在一部分文本的开头插入一个。我怎样才能做到这一点?显示文字时,如何创建一个创建该项目符号的点? 编辑:* 应该在 iOS 上可用 * 问题答案: 简单一点:[mutableAttributedString insertAttributedString:@“•\ t” atIndex:0]; 难点。遵循以下内容。(这是从一个较大的项目中摘录的,但可能会为您提供一个不错的开

  • 问题内容: 我了解Java中的无符号右移运算符“ >>>”是什么,但是为什么我们需要它,为什么我们不需要相应的无符号左移运算符? 问题答案: 该运营商允许你将和为32位和64位 无符号 整型,这是从Java语言缺少的。 当您移动不代表数值的内容时,这很有用。例如,您可以使用32位s 表示黑白位图图像,其中每个位图在屏幕上编码32个像素。如果需要将图像向右滚动,则希望将an左侧的位变为零,以便可以轻

  • 我已经开始使用facebook和google+进行firebase登录。 https://github.com/firebase/firebase-login-demo-android/blob/master/app/src/main/java/com/firebase/samples/logindemo/mainactivity.java 在上面的代码中,什么是“firebase_url”。当我

  • 如何决定projectkey?我的意思是我们在哪里可以找到我们的<代码>。Net,< code>plsql项目? 注意-我是这些声纳的新手,正在尝试在我的组织中自己设置所有这些。

  • 本文向大家介绍Django项目中python类的最佳位置是什么?,包括了Django项目中python类的最佳位置是什么?的使用技巧和注意事项,需要的朋友参考一下 您可以将上述课程放在想要的地方。 示例 然后,您可以使用import导入qux.py模块。 从project.foo.qux导入* 处理大量文件时,使目录更好。例如-