在像这样的定义中
var imgWheel = new wheelnav("divId");
imgWheel.createWheel(["imgsrc:img/menu1.png","imgsrc:img/menu2.png","imgsrc:img/menu3.png"]);
我可以一直假设([编辑]假设正确的施法会发生,这不是问题的焦点[/ edit])
typedef struct
{
myType array[N];
} myStruct;
myStruct obj;
将返回TRUE或者我应该担心编译器引入额外的填充以容纳myType对齐必需品吗?从理论上讲,这不应该发生,因为结构只有一个字段,但我对此并不完全确定。
答案 0 :(得分:6)
根据当前的C ++标准草案[class.mem] §20 (N4527),强调增加了:
如果标准布局类对象有任何非静态数据成员, 其地址与地址相同 其第一个非静态数据成员 。否则,其地址与其第一个基类的地址相同 子对象(如果有的话)。 [注意:因此在标准布局结构中可能存在未命名的填充 对象, 但不是在开头,以实现适当的对齐 。 - 结束说明]
myStruct
是否为标准布局,取决于myType
是否为标准布局。如果是,那么你所要求的就是c ++标准所保证的。
请注意&obj
和&obj.array[0]
具有不相关的指针类型,因此表达式在c ++中不合法。
答案 1 :(得分:6)
通过适当的演员,这将始终返回true。
来自C standard的第6.7.2.1节:
13. 在结构对象中,非位字段成员和位域所在的单位具有增加的地址 按声明的顺序排列。 指向结构的指针 对象,适当转换,指向其初始成员(或 如果该成员是一个位字段,那么到它所在的单位 居住),反之亦然。 a内可能有未命名的填充 结构对象,但不是在它的开头。