【问题标题】:Using standard layout types to communicate with other languages使用标准布局类型与其他语言交流
【发布时间】:2021-11-03 01:20:40
【问题描述】:

This draft of the standard11.2.6 包含关于标准布局类型的注释:

[注 3:标准布局类对于与用其他编程语言编写的代码进行通信很有用。它们的布局在[class.mem] 中指定。 — 尾注]

在指向class.mem 的链接之后,我们发现了有关以here 开头的标准布局类型的布局规则,但我不清楚它们是什么使它们对与其他语言进行通信有用。这一切似乎都与布局兼容的类型和常见的初始顺序有关,但我没有看到任何迹象表明这些兼容性要求会扩展为给定的实现。

我一直认为标准布局类型不能具有由实现强加的任意填充,并且必须遵循“直观”的布局,这将使它们易于在其他语言中使用。但我似乎找不到任何这样的规则。

这个注释是什么意思?我是否遗漏了任何强制标准布局类型至少在给定平台上保持一致的规则?

【问题讨论】:

    标签: c++ language-lawyer standard-layout


    【解决方案1】:

    该标准不能有意义地谈论其他语言和实现:即使可以明确定义“平台”,它所能做的只是限制 C++ 实现,可能以一种方式不可能满足其他软件做出的任何任意选择。也就是说,ABI 可以定义这些东西,标准布局类型是那些没有任何“C++ 特定”(如引用、基类子对象或虚拟表指针)的类型可能无法映射到其他环境。实际上,“其他环境”只是 C,或其他一些本身遵循 C 规则的语言(例如,Python 中的ctypes)。

    【讨论】:

    • 这些都是好点。我想这意味着标准布局类型将使用最简单或最可重现的 ABI,以便其他语言可以更轻松地匹配它。这并不是要定义“通用布局”,我想这不可能。这是一个好的解释还是我误解了?
    • @FrançoisAndrieux:是的,虽然指针互转换性(同样是为了 C 兼容性)和空基优化等其他一些东西也是根据标准布局类型定义的
    猜你喜欢
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 2012-05-18
    • 2016-03-20
    • 2016-05-06
    • 1970-01-01
    相关资源
    最近更新 更多