在C中,我看到一些使用offsetof来计算结构中成员到其开始的偏移量。
仍然建议在c++中使用吗?没有这个宏,还有其他方法吗?
c++有指向成员的指针。它们类似于偏移量,但(1)类型安全(2)更通用——它们也与方法、基类等一起工作。
offset是c++标准中为C兼容而提供的特性,因此不建议在C word
我不推荐它,除非你真的需要。只要你的用法在C中是有效的,那么在c++中也应该是有效的。如果你不知道自己在做什么,你的问题是无法回答的。
不,它不是。
适当的C++
样式鼓励用户尽可能避免所有底层细节。这既是为了安全性/正确性,也是为了可读性。只有当低级操作保证了真正和显著的性能改进时,才应该开始使用低级操作。
offsetof()
的用法之一是在类c代码中具有固定头和可变大小数组的结构,如本文所述:
为什么一些结构以大小为1的数组结束?
(请注意,这篇博客文章使用FIELD_OFFSET
宏,这是一个Windows-ism,对应于offsetof()
。)
我认为在现代c++中,我们应该使用更高级的技术和代码,如 std::vector
用于可变大小的数组。