C++中结构体成员反向索引赋值是否属于非法别名?
问题解答
这段代码不属于非法别名,原因如下:
- C++的别名规则核心限制是「不同类型的指针/引用不能互相访问对象(少数例外情况除外)」,但这里
&s.b是int*类型,(&s.b)[-1]等价于*(&s.b - 1),访问的是s.a——它本身就是int类型,类型完全匹配,不违反别名规则。 - 你提到的「int可能不像普通数组那样布局」是struct成员的内存填充问题,但只要排除这种布局异常,
s.a在内存中必然位于s.b的前面(struct成员按声明顺序布局),&s.b - 1会精准指向s.a的内存地址,访问行为是定义良好的。
内容的提问来源于stack exchange,提问作者user6562673
相关产品推荐
相关产品推荐

