【问题标题】:C++ - standard-layout [duplicate]C ++ - 标准布局[重复]
【发布时间】:2014-03-26 13:39:57
【问题描述】:

根据当前的C++标准草案,一个标准布局类

要么在派生最多的类中没有非静态数据成员,并且最多有一个具有非静态数据成员的基类,要么没有具有非静态数据成员的基类

我还没有看到任何在此限制下会更有效的实现。为什么会存在(除了让事情变得更困难)?

【问题讨论】:

  • 该文本来自哪里?请提供一些背景信息。
  • 这个问题更像是:是否有一个实现可以使给定的限制有意义?
  • @HristoVenev 我是这样看待 POD 结构的:它只是数据,这意味着它可以很容易地跨边界复制。一个简单的想法是我可以将这个结构(和这个结构的一个数组)完整地写入一个文件,超级简单(简单的内存转储)。如果它有静态数据成员,或者有多重继承,这很重要:我应该把那个静态数据成员放在文件中的什么位置?我现在必须做花哨的解析才能得到它。在许多情况下,POD 结构由于其内存布局而更易于使用。
  • struct A{int a;};struct B:A{int b;}; B 在大多数实现中可以被认为是标准布局。
  • @JoachimPileborg 这来自std::is_standard_layout 文档。我刚刚编辑了帖子以澄清。

标签: c++ standard-layout


【解决方案1】:

标准布局的目的不是效率,而是它与 C 的数据互操作性

【讨论】:

  • 所以如果我想使用一个需要我使用offsetof 的 C 库,但让我定义自己的结构,我不能使用继承。
  • 如果你想'发送'一个结构到 C 库,你必须能够以某种方式在 C++ 中声明它,以便布局是库所期望的
  • 我声明如下:size;特殊成员的偏移量
猜你喜欢
  • 2012-07-03
  • 2013-04-06
  • 2017-02-15
  • 2020-11-08
  • 1970-01-01
  • 2012-04-07
  • 1970-01-01
  • 2012-02-23
  • 1970-01-01
相关资源
最近更新 更多