一个元素的结构是否与元素本身兼容?

Gui*_*nal 6 c++ c++11

如果我有以下结构:

struct Foo { int a; };
Run Code Online (Sandbox Code Playgroud)

代码是否符合C++标准?我的意思是,它不能产生"未定义的行为"吗?

Foo foo;
int ifoo;

foo = *reinterpret_cast<Foo*>(&ifoo);

void bar(int value);

bar(*reinterpret_cast<int*>(&foo));

auto fptr = static_cast<void(*)(...)>(&bar);
fptr(foo);
Run Code Online (Sandbox Code Playgroud)

APr*_*mer 10

9.2/20在N3290中说

指向标准布局结构对象的指针,使用reinterpret_cast进行适当转换,指向其初始成员(或者如果该成员是位字段,则指向它所在的单元),反之亦然.

而你的Foo是一个标准布局类.

所以你的第二次演员是正确的.

我不能保证第一个是正确的(并且我使用的架构中,char的对齐限制比仅包含char的结构更弱,在这样的架构上,这将是有问题的).标准的保证是,如果你有一个指向int的指针,它真正指向结构的第一个元素,你可以将它重新解释为指向结构的指针.

同样地,如果它是re​​interpret_cast,我看不到任何可以使你的第三个被定义的东西(我很确定一些ABI使用不同的约定来传递结构和基本类型,所以它非常可疑,我需要一个明确的提及接受它的标准)我很确定在指向函数的指针之间什么都不允许static_cast.