【发布时间】:2018-04-21 12:11:21
【问题描述】:
我正在编写一个类,假设Are enumeration types layout compatible with their underlying type? 的答案是“是”,布局兼容struct kevent,但使用enum classes 表示filter、flags 等相关字段的基础类型。它也是标准布局(字段都是private 并且都是标准布局,没有virtual 成员,没有基类)。从我对n3690 的阅读中,我可以确定我的班级和struct kevent 具有相同的值表示,但是我在标准中看不到任何允许我在它们之间使用reinterpret_cast 的东西,即使这看起来像对“价值表征”的合理解释。这在技术上是标准允许的吗?如果不是,知道类型的值表示会给您带来什么?
EDIT 2014/02/24 16:45 EST:作为对评论的回应,我应该澄清一下,我想 reinterpret_cast 第一个类引用 第二个,当然你不能直接reinterpret_cast一个非指针类型到另一个非指针类型。
【问题讨论】:
-
[class.mem]/18 允许通过联合进行某些类型的双关语,[class.mem]/19 允许通过
reinterpret_cast访问 first 数据成员。但我不确定是否还有更多。 -
你不能
reinterpret_cast在结构类型之间,你的意思是在指向这些类型的指针之间转换并通过指向另一个的指针读取一个? -
如果您可以将
reinterpret_cast从pointer to A转换为pointer to B,您可以将reinterpret_cast从A转换为reference to B。我将更新问题以明确提及reference to位。
标签: c++ standards c++14 standard-layout