use*_*635 1 c++ undefined-behavior
假设short是2个字节,并且int在32位OS上是4个字节.以下是未定义的行为吗?
short s = 42;
int *p = (int*)(&s);
Run Code Online (Sandbox Code Playgroud)
不,您发布的代码没有显示未定义的行为,但尝试阅读*p会.另外,根据所要求的对齐int和short,铸造的结果可能是不确定的,并且不可逆转(见5.2.10 [expr.reinterpret.cast]/7).
见ISO/IEC 14882:2011 3.10 [basic.lval]/10:
如果程序试图通过以下类型之一以外的glvalue访问对象的存储值,则行为未定义:
- 对象的动态类型,
- 一个cv限定版本的动态类型的对象,
- 与对象的动态类型类似的类型(如4.4中所定义),
- 与对象的动态类型对应的有符号或无符号类型的类型,
- 一种类型,是有符号或无符号类型,对应于对象动态类型的cv限定版本,
- 聚合或联合类型,包括其元素或非静态数据成员中的上述类型之一(递归地,包括子聚合或包含联合的元素或非静态数据成员),
- 一个类型,它是对象动态类型的(可能是cv限定的)基类类型,
- char或unsigned char类型.
您尝试访问的对象是a short并且*p是类型的glvalue,int它不符合上述任何描述.
| 归档时间: |
|
| 查看次数: |
539 次 |
| 最近记录: |