在这样的定义里面
typedef struct
{
myType array[N];
} myStruct;
myStruct obj;
Run Code Online (Sandbox Code Playgroud)
我可以一直假设([编辑]假设正确的施法会发生,这不是这里问题的焦点[/ edit])
(&obj == &obj.array[0])
Run Code Online (Sandbox Code Playgroud)
将返回TRUE或我应该担心编译器引入额外的填充以适应myType对齐必需品?理论上这不应该发生,因为结构有一个单独的字段,但我不完全确定这一点.
根据目前的C++标准草案[class.mem]§20(N4527),重点补充说:
如果标准布局类对象具有任何非静态数据成员,则其地址与其第一个非静态数据成员的地址相同.否则,其地址与其第一个基类子对象的地址(如果有)相同.[注意:因此,在标准布局结构对象中可能存在未命名的填充,但不是在其开头,以实现适当的对齐. - 结束说明]
是否myStruct标准布局,取决于是否myType是标准布局.如果是,那么你要求的是c ++标准.
请注意&obj并且&obj.array[0]具有不相关的指针类型,因此表达式在c ++中是不合法的.