2

该标准草案在11.2.6处包含有关标准布局类型的注释:

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

按照链接,我们从这里class.mem开始找到有关标准布局类型布局的规则,但我不清楚它们如何使它们对与其他语言进行通信有用。这一切似乎都与布局兼容的类型和通用的初始序列有关,但我没有看到任何迹象表明这些兼容性要求会扩展为给定的实现。

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

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

4

1 回答 1

3

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

于 2021-11-03T02:37:09.353 回答