标签: c++ c c++11
在查看我的编译器(VS2015)如何实现offsetof宏时,我看到以下实现:
offsetof
#define offsetof(s,m) ((size_t)&reinterpret_cast<char const volatile&>((((s*)0)->m)))
在我看来,这是在((s*)0)->m取消引用空指针。我理解这是未定义的行为。编译器指定的这种未定义的行为是否比语言更强烈,或者是否存在一些我从未理解的“永不取消引用空指针”规则的细微差别?
((s*)0)->m