C++ 标准中哪里谈到了别名?我查看了目录,没有看到“别名”这个词。我试图查看一个定义规则(3.2),但搜索“别名”没有结果。我不知道它可能在哪里。我正在寻找内存别名
别名主要在§3.10[basic.lval]/10中讨论:
If a program attempts to access the stored value of an object through a glvalue of other than one of the
following types the behavior is undefined:52
- 对象的动态类型,
- 对象动态类型的 cv 限定版本,
- 与对象的动态类型类似的类型(如 4.4 中定义),
- 与对象的动态类型相对应的有符号或无符号类型,
- 与动态类型的 cv 限定版本对应的有符号或无符号类型的类型
的物体,
- 聚合或联合类型,其元素或非元素中包括上述类型之一
静态数据成员(递归地包括子聚合的元素或非静态数据成员
或包含联合),
- 是对象动态类型的(可能是 cv 限定的)基类类型的类型,
- a
char
or unsigned char
type.
52) The intent of this list is to specify those circumstances in which an object may or may not be aliased.
所以,举例来说,
int x = 1;
*(char*)(&x); // (implementation-)defined
*(unsigned*)(&x); // (implementation-)defined
*(float*)(&x); // undefined
下面提到的内容可能也很有趣。
§5.17[表达式.ass]/8
如果从另一个以任何方式重叠的对象访问存储在一个对象中的值,则该对象的存储
第一个对象,则重叠应准确,并且两个对象应具有相同的类型,否则
行为未定义。 [Note:此限制适用于左右两侧的关系
赋值操作;它不是关于如何为赋值目标添加别名的声明
一般的。见 3.10。 —end note ]
§17.6.4.9[res.on.arguments]/1 pt 3:
如果函数参数绑定到右值引用参数,则实现可以假设
此参数是对此参数的唯一引用。 … [这
实现可以自由地优化别名检查,如果参数是,则可能需要
左值。]
§26.6.2[valarray.syn]/2:
The valarray
数组类被定义为没有某些形式的别名,因此允许对
这些类有待优化。
和其余的<valarray>
还讨论了如何实现该类以避免数据别名。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)