含数组成员的C++类对象指针互转与严格别名规则合规性问询
C++中reinterpret_cast指针转换的合规性分析
即使拥有二十多年C++编程经验的开发者,也常会对以下问题感到困惑:哪些reinterpret_cast指针转换具有定义明确的行为,哪些又会因strict aliasing规则触发未定义行为。
本文结合C++17标准的pointer-interconvertibility条款、aggregate类型定义及左值访问规则,针对示例代码中的三个reinterpret_cast转换及后续成员访问操作的合规性展开分析:
- 初始判断:
Foo*与Qux*之间的转换合规,Bar*的转换不合规 - 后续疑问:结合
aggregate类型规则,Foo和Bar均属于aggregate类型,那通过它们的指针访问int元素是否应该合规?
内容的提问来源于stack exchange,提问作者Peter Zajac
相关产品推荐
相关产品推荐

