为什么我们没有适用于所有类型的偏移量(具有虚拟继承的类型除外)?
Why don't we have offsetof which works with all types (except types with virtual inheritance)?
当前,offsetof
仅与标准布局类型一起使用。但是,我从来没有理解这个限制。当然,对于具有虚拟继承的类型,offsetof
无法正常工作。但是对于没有虚拟继承的类型,它可以。我知道,该标准允许非标准布局类型对于每个实例都具有不同的成员偏移。但是,我从未听说过使用此功能的任何编译器实现。为什么会这样做?
我知道的所有编译器,对于没有虚拟继承的类型,会员的偏移是编译时常数。
所以问题是:
- 是否有编译器,对于哪些成员的偏移不是编译时间常数(对于没有虚拟继承的类型)?
- 为什么委员会不放松
offsetof
的要求?
(我在stackoverflow上阅读了很多相关的答案,并在各个地方对此进行了讨论,但是我还没有找到原因)。
委员会在7月讨论了该限制的任意性质。它还没有在工作文件中,但我相信它将在C 20中放松(至少在这个程度上)。
放松要求到什么?offsetof
可以使用,除非给出不正确的结果?
访问C 对象的选定数据成员的方法是指向数据成员的指针。
相关文章:
- 继承模板类中的类型别名
- 在运行时检查继承是否只有一种类型和 void*
- C++从外部类继承的嵌套类;不允许使用不完整的类型
- 可以从std::string继承以提供类型一致性吗
- 事件系统:使用类型转换或联合进行继承
- 继承类中的 C++ 成员变量类型重写
- C :可以从类及其受保护的成员类型继承可以继承吗?
- 模板类上的类型继承
- C 类从类型继承
- 在 C++11 中,从私有嵌套类型继承是否合法?
- 模板基类型继承
- C#中从指定类型继承的模板类的等效项是什么
- 为boost mpl列表中的每种类型继承容器
- 从基类和返回类型继承模板
- 从基元类型继承的枚举
- 使用类型继承的数字组的层次结构
- 在任何/某些C++编译器中是否有允许从本机(基本)类型继承的选项
- 创建从不同对象提供的类型继承的类的对象
- c++用这个类作为类型继承类模板
- 我如何从mpl::vector中的所有类型继承