gpt4 book ai didi

c++ - C++ 中的 offsetof 宏

转载 作者:行者123 更新时间:2023-12-02 15:59:37 25 4
gpt4 key购买 nike

#define offsetof(s,m) ((::size_t)&reinterpret_cast<char const volatile&>((((s*)0)->m)))

我已经找了几分钟这段代码,但我仍然不明白 const char volatile 引用是什么东西,这让我很头疼。

#define offsetof(s,m) ((size_t)&(((s*)0)->m))

这个很清楚,确实有道理,而且效果很好,为什么另一个被 MSVC 编译器使用。

最佳答案

如果 s::m 是类类型,它可以重载 operator&,所以 &(((s*)0)->m) (((s*)0)->m).operator&() 相同,它可能会做一些意想不到的事情。

为了不使用任何自定义的operator&,首先将其转换为const volatile char&(将具有相同的地址)。它需要同时是 constvolatile 因为 s::m 可能是 const 和/或 volatile。

这就是std::addressof会在 C++11 之前实现。

关于c++ - C++ 中的 offsetof 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70979477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com