【发布时间】:2014-05-08 03:14:24
【问题描述】:
在 C 中,我看到了 offsetof 的一些用法来计算结构中成员到其开头的偏移量?
是否仍建议在 C++ 中使用?没有这个宏还有其他方法吗?
【问题讨论】:
-
offsetof can be used in C++ 具有
If type is not a standard-layout class (Clause 9), the results are undefined和The result of applying the offsetof macro to a field that is a static data member or a function member is undefined.的限制。 -
您应该认真问问自己为什么需要“offsetof”宏的功能。它在 C++ 中可用,但它会给非 POD 结构和类带来意想不到的结果。如果您不知道 POD 是什么,那么您最好不要在 C++ 代码中使用它。除非你有充分的理由,否则最好不要在 C 代码中使用它。
-
为什么每个人都反对使用它?在计算内联汇编的偏移量或计算可更改的 POD 结构的偏移量(Wintenl.h 中的 WINAPI 的 TEB 结构)以及计算 x32 与 x64 代码中的偏移量而不对偏移量进行硬编码时,它很有用..
-
如果需要,使用它并没有什么坏处。如果这正是您所需要的,我建议您不要创建自己的实现。它在 C++ 标准中得到官方支持。我建议你多考虑一下你的设计,看看你是否真的需要它。
-
@CantChooseUsernames:然而,真正的问题是你为什么需要知道?目前,我想不出一个需要使用它的问题。