59得票6回答
在C11中,&((struct name *)NULL -> b)会导致未定义的行为吗?

示例代码:struct name { int a, b; }; int main() { &(((struct name *)NULL)->b); } 这会导致未定义的行为吗?我们可以辩论它是否“取消引用null”,但是C11没有定义术语“取消引用”。 6.5....

54得票1回答
通过指向不同且无关的子对象的指针,是否可以获得指向一个子对象的指针?

看看这个简单的代码:struct Point { int x; int y; }; void something(int *); int main() { Point p{1, 2}; something(&p.x); return p....

53得票11回答
为什么在C++中不能对非POD结构使用offsetof?

我在研究如何在C++中获取类成员的内存偏移量,并在维基百科上找到了以下内容: 在C++代码中,你不能使用"offsetof"来访问不是"Plain Old Data Structures"结构或类的成员。 我试过了,它似乎可以正常工作。class Foo { private: ...

39得票8回答
为什么这个offsetof()实现起作用了?

在 ANSI C 中,offsetof 的定义如下。#define offsetof(st, m) \ ((size_t) ( (char *)&((st *)(0))->m - (char *)0 )) 为什么当我们解引用空指针时,这段代码不会抛出分段错误?这是编译器的...

29得票1回答
在标准布局对象内进行指针算术运算时(例如使用offsetof),我们是否需要使用std::launder?

这个问题是对在不实际指向字符数组的情况下,给“char *”指针添加内容是否未定义行为?的后续提问。 在CWG 1314中,CWG确认在标准布局对象内使用无符号字符指针进行指针运算是合法的。这似乎意味着与链接问题中类似的一些代码应该按预期工作。 struct Foo { float...

27得票1回答
在C++17中,对于非标准布局类而言,“`offsetof`有条件支持”是什么意思?

C++17标准在[support.types.layout]中说: 使用offsetof宏与非标准布局类的类型是有条件支持的。 而在[defns.cond.supp]中: 条件支持 一个实现没有必要支持的程序构造 我觉得这个对offsetof的定义不够精确。 这是否意味着我...

19得票1回答
C++编译时模板内的offsetof

我需要在使用成员选择器的template中使用offsetof。我已经想到一种方式,如果你能原谅这个笨拙的语法: template <typename T, typename R, R T::*M > constexpr ...

18得票6回答
“offsetof”宏来自于头文件<stddef.h>,它是否会引发未定义行为?

来自MSVC实现的示例:#define offsetof(s,m) \ (size_t)&amp;reinterpret_cast&lt;const volatile char&amp;&gt;((((s *)0)-&gt;m)) // ...

15得票3回答
在编译时确定结构体成员的字节偏移量?

我希望在编译时找到结构体成员的字节偏移量。例如:struct vertex_t { vec3_t position; vec3_t normal; vec2_t texcoord; } 我想知道在这种情况下normal的字节偏移量是多少(应该是12)。 我知道我可以使...

14得票2回答
使用offsetof访问结构体成员。

我有以下的代码:#include &lt;stddef.h&gt; int main() { struct X { int a; int b; } x = {0, 0}; void *ptr = (char*)&amp;x + offsetof(struct X...