将指针指向结构的第一个元素

时间:2018-12-18 16:02:18

标签: c++ pointers struct alignment member

我认为该标准为我提供了查找结构的1 st 元素的功能。我似乎找不到。

我害怕对齐:我不认为reinterpret_cast进入结构的1 st 元素是合法的吗?

例如,给定struct { int first, int second } foo;如果我不知道foo的布局是第1 st first中第1 st 元素的地址>元素? (这意味着&foo.first不是有效的解决方案。)

1 个答案:

答案 0 :(得分:1)

  

我认为reinterpret_cast进入结构的第一个元素是不合法的吗?

合法的,但前提是该类为标准版式。标准草稿:

  

[基本化合物]

     

如果满足以下条件,则两个对象a和b是指针可互换的:

     

...

     
      
  • 一个是标准布局类对象,另一个是该对象的第一个非静态数据成员,   或者,如果该对象没有静态数据成员,则该对象的任何基类子对象(10.3),或者
  •   
     

...

     

如果两个对象是指针可互换的,则它们具有相同的地址,并且有可能获得一个   通过reinterpret_cast从一个指向另一个的指针...