c++ - 布局兼容类型的目的是什么?

标签 c++ struct language-lawyer c++17 memory-layout

标准defines当两种类型布局兼容时。但是,我在标准中的任何地方都看不到当两种类型布局兼容时会产生什么后果。似乎 layout-compatible 是一个没有在任何地方使用的定义。

布局兼容的目的是什么?

注意:据推测,这可能意味着类型具有相同的布局(offsetof 对于每个相应的成员都是相同的),因此例如,对于平凡可复制的类型,底层字节可以在之间复制他们。但我在标准中没有看到类似的内容。

最佳答案

该标准确实定义了布局兼容性很重要的一种特定情况:在 union 中。如果两个成员是布局兼容的,并且其中一个是事件的 union 成员,那么您可以通过指向该 union 的任何布局兼容成员的指针/引用来访问该对象>。这是 the "common initial sequence" rule 的结果.

关于c++ - 布局兼容类型的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53041630/

相关文章:

c++ - 使用声明作为覆盖

c++ - boost::asio -- asio_handler_deallocate 在 io_service::~io_service() 中调用,在 io_service::stop() 之后

struct - 如何交换结构的两个字段

c - 分配给结构体中的结构体的语法

c - 理解结构体

c++ - 为什么 T[] 可以简单复制但不能简单破坏?

c++ - 模板依赖类型名

c++ - 如果模板别名声明解析为一个新的类型族?

c++ - 二进制 '=' : no operator found which takes a right-hand operand (or there is no acceptable conversation)

c++ - std::bind 和函数模板