相关疑难解决方法(0)

什么是聚合和POD以及它们如何/为何特殊?

常见问题解答涉及聚合和POD,并涵盖以下材料:

  • 什么是聚合
  • 什么是POD(普通旧数据)?
  • 它们有什么关系?
  • 它们如何以及为何特别?
  • C++ 11有什么变化?

c++ aggregate standard-layout c++11 c++17

525
推荐指数
6
解决办法
13万
查看次数

为什么C++ 11的POD"标准布局"定义是这样的?

我正在研究C++ 11中新的,轻松的POD定义(第9.7节)

标准布局类是一个类:

  • 没有非标准布局类(或此类类型的数组)或引用类型的非静态数据成员,
  • 没有虚函数(10.3),也没有虚基类(10.1),
  • 对所有非静态数据成员具有相同的访问控制(第11条),
  • 没有非标准布局基类,
  • 或者在最派生类中没有非静态数据成员,并且最多只有一个具有非静态数据成员的基类,或者没有具有非静态数据成员的基类,并且
  • 没有与第一个非静态数据成员相同类型的基类.

我突出了让我感到惊讶的一些事情.

如果我们容忍具有不同访问控制的数据成员会出什么问题?

如果第一个数据成员也是基类会出什么问题?即

struct Foo {};
struct Good : Foo {int x; Foo y;};
struct Bad  : Foo {Foo y; int x;};
Run Code Online (Sandbox Code Playgroud)

我承认这是一个奇怪的结构,但为什么要Bad被禁止但不是Good

最后,如果不止一个组成类有数据成员,会出现什么问题?

c++ pod standard-layout c++11

41
推荐指数
3
解决办法
6446
查看次数

标签 统计

c++ ×2

c++11 ×2

standard-layout ×2

aggregate ×1

c++17 ×1

pod ×1