别名规则是否对称?
我和IRC的某个人讨论了这个问题。标准允许我们用
char
左值更改int
类型的对象。
int a;
char *b = (char*) &a;
*b = 0;
如果我们知道对齐是好的,我们会被允许在相反的方向做这个吗?
我看到的问题是,如果将别名规则视为非对称关系,则别名规则不会涵盖以下的简单情况
int a;
a = 0;
原因是,每个对象包含一系列sizeof(obj)
unsigned char
对象(称为“对象表示”)。如果我们更改int
,我们将更改部分或全部这些对象。但是,别名规则只表示允许我们将int
改为char
或unsigned char
,但不是相反。另一个例子
int a[1];
int *ra = a;
*ra = 0;
3.10 / 15(“包含...的聚合或联合类型”)只描述了一个方向,但这次我们需要另一种方式(“一种类型的元素或非静态数据成员类型骨料...”)。
另一个方向是隐含的吗?这个问题也适用于C.
没有找到相关结果
已邀请:
3 个回复
降女陷费券
和
,以及签名/无符号可能会有所不同) 包含一个此类型的结构或联合 字符类型 当然,高级类型没有在高级中指定 - 它只是一个用于指定别名的构造。但目的很简单,就是不要使用两种不同的非字符类型访问同一个对象。 所以答案是,是的,你确实可以走向另一个方向。
靛取糕奖穿
良阑纠苫
)。 C ++ 3.10 / 15声明它是第一个可以通过左值访问对象的项目,该左值具有“对象的动态类型”类型。 我在这个问题上有什么误解?