You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 02:26:19