我和IRC上的某個人討論過,這個問題出現了。本標準允許我們將int
類型的對象改爲char
左值。混疊規則是否對稱?
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(「一個聚集或聯合,其包括......型」)中描述,但此時,我們需要周圍的其他方法(「A類型是元素或聚合的非靜態數據成員類型...「)。
是否暗示了另一個方向?這個問題也適用於C.
請問您可以添加一些代碼來說明您的意思是「相反的方向」嗎?你認爲哪些代碼可能不被允許? – 2011-01-21 14:05:01
@Rob我以爲我展示了。也許我失敗了。 `a = 0`可能不被允許,以及`* ra = 0`。 「含有酒吧的酒吧」的「相反方向」是指「富含酒吧」。什麼是不明確的? – 2011-01-21 14:29:42
如果你的意思是,`char a ='A'; int * pi =(int *)a; * pi ='B';`,那麼我不認爲這樣的事情一開始就是安全的。 – Nawaz 2011-01-21 15:02:07